1. Django 简介
Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。
使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。
django3.2版本:官方文档
2. 工程搭建
2.1 安装Django
pip3 install django==3.2
2.2 创建工程
创建工程:demo
django-admin startproject demo
创建子应用:users
python manage.py startapp users
注册安装子应用,在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS如下:
2.3 创建视图
2.3.1 在users.views.py中编写视图代码
from django.http import HttpResponse
def index(request):
"""
index视图
:param request: 包含了请求信息的请求对象
:return: 响应对象
"""
return HttpResponse("hello the world!")
2.3.2 定义路由URL
1) 在子应用users中新建一个urls.py文件用于保存该应用的路由。
from django.urls import path,
from . import views
# urlpatterns是被django自动识别的路由列表变量
urlpatterns = [
path(r'index/', views.index),
]
2) 在工程总路由demo/urls.py中添加子应用的路由数据。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path(r'users/', include('users.urls')),
]
- 使用include来将子应用users里的全部路由包含进工程路由中;
- path函数和url函数的区别:官方文档
2.4. 启动运行Django服务
启动django程序
python3 manage.py runserver
在浏览器中输入网址127.0.0.1:8000/users/index/ 可看到返回的信息
+
3. 配置、静态文件、jinj2模板
3.1 配置文件
3.1.1 BASE_DIR
django项目启动的基础路径
3.12 DEBUG
DEBUG默认为True,在开发调试模式下使用。项目上线时修改为False
3.1.3 本地语言与时区
初始化的工程默认语言和时区为英语和UTC标准时区
LANGUAGE_CODE = 'en-us' # 语言
TIME_ZONE = 'UTC' # 时区
将语言和时区修改为中国大陆信息
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
3.2 静态文件
为了提供静态文件,需要配置两个参数:
- STATICFILES_DIRS=[] 静态文件的目录
- STATIC_URL 访问静态文件的URL前缀
注意: Django 仅在调试模式下(DEBUG=True)能对外提供静态文件。当DEBUG=False工作在生产模式时,Django不再对外提供静态文件,需要是用collectstatic命令来收集静态文件并交由其他静态文件服务器来提供
3.3 jinja2模板配置
安装:pip3 install jinja2
创建 jinja2_env.py文件:
from jinja2 import Environment
def environment(**options):
env = Environment(**options)
return env
在settings.py文件导入模板配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',#修改1
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS':True,
'OPTIONS':{
'environment': 'jinja2_env.environment',# 修改2
'context_processors':[
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
4. 部署
使用uwsgi部署(不搭配nginx)
安装:pip3 install uwsgi
项目的路径:/opt/demo
使用命令部署:
uwsgi --chdir /opt/demo/ \
--module demo.wsgi:application \
--env DJANGO_SETTINGS_MODULE=demo.settings \
--processes 4 \
--threads 2 \
--http 0.0.0.0:8000
使用配置文件的方式部署
创建uwsgi.ini 配置文件 ,写入如上内容。
[uwsgi]
chdir = /opt/demo/
module = demo.wsgi:application
env = DJANGO_SETTINGS_MODULE=demo.settings
processes = 4
threads = 2
http = 0.0.0.0:8000
启动命令:uwsgi uwsgi.ini
nginx+uwsgi的方式部署。
uswgi的配置:
[root@python demo]# cat /opt/demo/demo/uwsgi.ini
[uwsgi]
# 使用Nginx连接时使用,Django程序所在服务器地址
socket=192.168.41.41:8000
# 直接做web服务器使用,Django程序所在服务器地址
# http=172.16.21.25:8001
# 项目目录
chdir=/opt/demo/
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=/opt/demo/demo/wsgi.py
# 进程数
processes=4
# 线程数
threads=2
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/usr/local/python3
部署static静态文件
- 创建文件夹
-
mkdir /opt/demo/static
- 在setting文件中新增变量STATIC_ROOT
-
STATIC_ROOT = BASE_DIR / "static/"
- 收集一下静态文件,收集到STATIC_ROOT 目录中
-
python3 /opt/demo/manage.py collectstatic
对nginx配置进行编辑
使用命令查看nginx配置文件的位置和是否正确
nginx -t
正常输出如下
[root@python demo]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
查看 /usr/local/nginx/conf/路径下有没有uwsgi_params文件,没有从nginx的GitHub页面下载
编辑 /usr/local/nginx/conf/nginx.conf文件
对添加如下内容
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream demo {
server 192.168.41.41:8000;
}
server {
listen 80;
#server_name localhost;
server_name 192.168.41.41;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
include uwsgi_params; # 导入uwsig_params
uwsgi_pass demo;
}
location /static { # 静态文件的路由
alias /opt/demo/static;
}
}
}
最后
启动uwsgi
uwsgi --ini /opt/demo/demo/uwsgi.ini
重新检查nginx配置文件,确保没问题后重启nginx服务
nginx -t
nginx -s reload
访问成功!: