分类目录归档:Python

Django

django是如何处理一个请求的?

1.1 django根据setting中ROOT_URLCONF设置的值确定URLconf模块【路由文件】

1.2 加载路由模块并找到变量urlpatterens,变量中包含django.urls.path()或django.url.re_path()【正则匹配】实例

1.3 django依次匹配每个URL模式,一旦其中一个模式匹配,Django就会导入并调用给定的视图【一个python函数或基于类的视图】,路由给视图传递以下参数:

a. 一个HttpRequest实例
b. 如果匹配的URL模式未返回任务命名组,则正则表达式中的匹配将作为位置参数提供

1.4 如果没有URL模式匹配,或在此过程引发异常,Django将调用适当的错误处理视图,自定义处理错误视图需要在URLconf模块中配置以下变量并设置视图文件位置:

a. handler400
b. handler403
c. handler404
d. handler500

1.5 几个例子

from django.urls import path, include, re_path
from apps.message import views
from django.conf.urls import url
from apps.article.views import IndexView as ArticleView
from .settings import MEDIA_ROOT
from django.views.static import serve
import xadmin  # 后台项目

urlpatterns = [
    # 匹配空路由 加载页面首页,路由命名为home 路由命名后可在模板中调用
    path('', ArticleView.as_view(),name='home'),  # 基于类视图方法的调用
    
    # 匹配 'article'路由,并把路由分发到app URLconf配置中,使用django.urls.include加载app URLconf配置文件
    path('article/', include('apps.article.urls')),  # 加载子URLconf配置

    # goods/100 将会被匹配
    path('goods/<int:id>', views.goods),

    path('admin/', xadmin.site.urls),
    # 使用正则表达式 语法是(?P<name>Pattern) name为参数名称 Pattern是匹配模式
    re_path(r'^goods/(?P<id>[0-9]{4})/$', views.goods),
]

#要在路由中捕获参数需要使用尖括号<int:id>  int为匹配参数的类型 id为参数的名字,在视图文件中获取 views.goods(request,id)

# 定义错误页面
handler500 = views.err404

handler404 = views.err404

windows下安装Python3.7+Django2.1+Apache2.4

1.Python3.7安装

官网下载Python3.7的安装包,我的系统是64位,所以选择的64位安装包,自定义安装需要勾选为所有用户安装和加入环境变量。

2.安装Apache2.4

我这里安装的是Wamp3.1的集成环境,里面集成了Apache2.4,也是64位的,必须要和Python相对应,不然会导致Apache发生错误。

3.安装Django2.1和mysql客户端
pip intsall Django //安装最新的Django
pip install mysqlclient //安装mysql客户端
4.安装mod_wsgi
pip install mod_wsgi //安装mod_wsgi

安装成功后在python安装包下\Python37\Scripts下执行:

mod_wsgi-express module-config

执行此命令会输入三行内容:

LoadFile "d:/soft/python/python37/python37.dll"
LoadModule wsgi_module "d:/soft/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "d:/soft/python/python37"

将此内容拷贝备用。

5.配置Apache httpd.cnf

将第4步生成的三行内容拷贝到http.cof中,保存并重启Apache即可,内容如下:

#mod_wsgi设置
LoadFile "d:/soft/python/python37/python37.dll"
LoadModule wsgi_module "d:/soft/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "d:/soft/python/python37"
#指定项目的wsgi.py配置文件路径
WSGIScriptAlias / D:/wenjunting/python/app/app/wsgi.py
#指定项目路径
WSGIPythonPath  D:/wenjunting/python/app
#指定静态文件位置 ,给与访问权限
Alias /static/ D:/wenjunting/python/app/collectstatic/  #必须把admin模块的文件一同打包到此目录下
<Directory D:/wenjunting/python/app/collectstatic>
    Require all granted
</Directory>
<Directory D:/wenjunting/python/app/app>
<Files wsgi.py>
    Require all granted
</Files>
</Directory>