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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值