このブログを検索

ラベル django の投稿を表示しています。 すべての投稿を表示
ラベル django の投稿を表示しています。 すべての投稿を表示

2020/02/16

djangoとapacheの連携

# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Dec 23 2019 20:45:34

/var/www 
で、djangoのプロジェクトを作る。

/var/www/kingyo
を作った。


mod_wsgiをインストール

dnf install python3-mod_wsgi


/usr/lib64/python3.6/site-packages/mod_wsgi/server
にある
mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

/etc/httpd/modules
にコピーする。

/etc/httpd/conf.d

django.conf
を作る。

# cat django.conf
LoadModule wsgi_module modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

WSGIScriptAlias / /var/www/kingyo/kingyo/wsgi.py
WSGIPythonPath /var/www/kingyo/

<Directory /var/www/kingyo/kingyo>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

/var/www/kingyo

wsgi.py
を作る。


# cat wsgi.py
#!/usr/bin/python
#coding:utf-8

import os
import sys

from django.core.wsgi import get_wsgi_application

sys.path.append("/var/www/kingyo")
sys.path.append("/var/www/kingyo/kingyo")

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "kingyo.settings")


application = get_wsgi_application()


apache再起動

これでapacheのデフォルトサイトがdjangoで作ったサイトになる。

この時、2つほど問題が
1.管理ページにアクセスできない
2.1を解決した後、管理ページのcssが読み込まれない

1.の解決
djangoで作ったプロジェクトフォルダ、dq.sqlsite3、のownerをapacheに変える

2.の解決
settings.py
に以下を追記
STATIC_ROOT = os.path.join(BASE_DIR, "static")

下記を実行
python manage.py collectstatic

/etc/httpd/conf/httpd.conf
にaliasを追加

Alias /static/ /var/www/kingyo/static/

<Directory /var/www/kingyo/static>
    Require all granted
</Directory>

apacheをリスタート

なかなか認証にたどりつけない....
が、この管理サイトというものがすでにpython+djangoで認証しているのである。
これに一般ユーザを追加すればよいのだ。

そしてdjangoはさっきちらっとでてきたが、デフォルトでSQLiteを使っている。

つまり上記の設定により Apache + python + SQLite が動いているのだ。

そこでWSGIという仕組みが使われている。

dbは好きなものに変更でき、postgresqlも使える。









django

pythonのcgiでdbにアクセスできるようになった。
さあ、dbを使ってちょっとしたアプリケーションを作ってみたいが、
何をするにもサービスにログインする仕組みは必要だろう。
以前からログインの仕組みをやりたいと思っていた。
しらべるとdjangoを使った方法が紹介されていたので、
まずdjangoを使ってみる。

centos8, python3が前提


pip intall django

以下は適当な場所にフォルダを作り、そこで実行した。

プロジェクトの作成
# django-admin startprojects myproject

#cd myproject

アプリケーションの作成
#python manage.py startapp myapp

myapp/views.py を編集

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse

def index(request):
        return HttpResponse("Hello")


myproject/urls.py を編集、
import myapp.views を追加、
最後のところに作成したアプリケーションへのpathを追加

from django.contrib import admin
from django.urls import path
import myapp.views

urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'', myapp.views.index, name='index')
]


myproject/myproject/settigs.py

にアクセスを許可するホスト名を追加する

ALLOWED_HOSTS = ['*']
で、なんでも許可

デフォルトは何も設定されていないので必ずエラーになる。

プロジェクトフォルダにある manage.pyを使って
migrate(設定の反映みたいなもの?)を実行

python manage.py migrate


アプリケーションを実行
xx.xx.xx.xxはサーバのグローバルIPアドレス
アドレスを指定しないと127.0.0.1になり、外部からアクセスできない。

python manage.py runserver xx.xx.xx.xx:8000


fierwall-cmdでtcp8000を開ける。

http://www.example.com:8000
にアクセス

Hello
と表示される。