Django, uwsgi使用教程
Django安装和配置
pip install django
创建工程
所有工程放在home下的app目录中,首先建立工程目录HelloWorld,再建立应用目录hello_app。
cd app
django-admin startproject HelloWorld
cd HelloWorld
django-admin startapp hello_app
可以查看目录结构
tree HelloWorld/
HelloWorld/
├── hello_app
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── HelloWorld
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
3 directories, 12 files
修改配置
1. 修改HelloWorld/setting.py文件中的ALLOWED_HOSTS属性使任何IP都可以访问;
ALLOWED_HOSTS = ['*']
2. 建立的app必须在HelloWorld/setting.py文件中注册,在INSTALLED_APPS 中添加app;
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello_app',
]
3. 注释掉MIDDLEWARE数组中的csrf
否则只能使用GET方法,不能POST,POST时Django会报错Forbidden (CSRF cookie not set.)
# 'django.middleware.csrf.CsrfViewMiddleware', #否则只能网页访问
4. 修改语言和时区
语言只是对django后台管理时候有效, USE_TZ = True时Django会对数据库相关操作时候UTC时间,False时候使用服务器时间。
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
5. 修改上传数据文件大小
DATA_UPLOAD_MAX_MEMORY_SIZE = 52428800 # ~50 M
添加视图函数
Django中运行程序的主要逻辑算法是放在视图文件=views.py中的,我们在app下的views文件中添加hi函数
from django.shortcuts import render
from django.http import HttpResponse
def hi(request):
return HttpResponse("Hello !")
配置app的url
先让工程的url.py中包含子app的url,注意path的第一参数是定制的url目录,可以随便写,第二个参数是app和urls文件,最后记得需要引入inlcude,。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', include('hello_app.urls')),
]
在app的目录下新建urls.py文件(这里大家都这么干[1],[2],也不清楚好处在哪,不过构架的确显得更加清晰了),添加如下内容。
from django.urls import path
from . import views
urlpatterns = [
path('hel/', views.hi),
]
- 注意:
老版本的django配置url使用from django.conf.urls import url,目前的版本(2.0.7)也支持这种方法。这时候一定要注意正则匹配,例如没有$时,否则会导致htttp:1.1.1.1/hello和http:1.1.1.1/hello1234访问的是相同方法,也可以用r^hel/方法。
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^hel$', views.hi),
]
启动
python manage.py runserver 0:8090
在浏览器输入网址IP:8090/hello/hel/可以看到如下内容
- 注意url中hello/和he/,他们在函数中的配置方法
models
如果使用了数据库需要安顺序运行如下两个命令[4][5]
python manage.py makemigrations
python manage.py migrate
其它
生产环境中注意白setting中的DEBUG = True改成Flase,否则访问网页是会有可用url提示,不安全。
uwsgi安装和配置
安装
pip install uwsgi
配置
在Django工程目录下新建一个script目录,用来存放配置。很多资料直接把uwsgi配置文件直接放在工程目录下,我是参考了[3],这样uwsgi的log和pid文件也会生成在script目录中,感觉文件干净些。
cd HelloWorld
mkdir script
vi uwsgi.ini
这里我们配置使用.ini后缀文件,uwsgi也支持xml配置方式。
[uwsgi]
# 和nginx通信用socket,单独运行时用http
socket = 172.16.110.100:8000
# 工程目录
chdir = /home/test/app/HelloWorld/
#
module = HelloWorld.wsgi
# 允许主进程
master = true
# 进程数量
processes = 8
# log文件,可以控制是否前台运行
daemonize = log_uwsgi.log
# 退出时清空环境变量
vacuum = true
# 进程pid
pidfile = pid_uwsgi.pid
#修改python代码时,自动重启uwsgi服务
py-autoreload=1
常用uwsgi命令
启动指定uwsgi服务
uwsgi --ini uwsgi.ini
重启指定uwsgi服务
uwsgi --reload pid_uwsgi.pid
停止指定uwsgi服务
uwsgi --stop pid_uwsgi.pid
查看后台uwsgi启动情况
ps -aux | grep uwsgi
或者
ps -ef | grep uwsgi
强制终止全部uwsgi
sudo killall -9 uwsgi
nginx配置
cd /usr/local/nginx/
sudo vi conf/nginx.conf
配置location,注意hello后的最好加"/"
server {
listen 80; # nginx监听80端口
server_name 172.16.110.100 ;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
charset UTF-8;
access_log /var/log/nginx/nginx_access.log;
error_log /var/log/nginx/nginx_error.log;
client_max_body_size 75M;
# nginx把80端口/hello/的请求转发到uwsgi_pass
location /hello/ {
include uwsgi_params;
uwsgi_pass 172.16.110.100:8001;
uwsgi_send_timeout 100;
uwsgi_connect_timeout 100;
uwsgi_read_timeout 100;
}
常用nginx命令
./sbin/nginx -s stop # 停止
./sbin/nginx -s reload # 重启
./sbin/nginx –t # 检查语法错误
重启ngxin后,访问相应网址如下:
[1]: https://blog.csdn.net/laughing2333/article/details/51674905
[2]: https://blog.csdn.net/qq_32227401/article/details/79997680
[3]: https://www.cnblogs.com/chenice/p/6921727.html
[4]:https://blog.csdn.net/qq_37049050/article/details/79740551, https://blog.csdn.net/hpu_yly_bj/article/details/78928089