三阶:Django - Redis - Ajax
第一章 Django
一、Django 基础
1. 基础
Django
是一个开源的、重量级的WEB
开发框架。
Django
的官网: https://www.djangoproject.com
2. 安装与卸载 Django
Django
目前最新的版本为4.2
,教学环境使用3.2
2.1 在线安装
sudo pip3 install django==版本号
说明:上述命令中版本号
可以省略,如果省略的话,则安装最新的版本。
2.2 离线安装
tar -zxvf Django-3.2.20.tar.gz
cd Django-3.2.20
sudo python3 setup.py install
2.3 查看Django
版本
python3 -m django --version
2.4 卸载Django
sudo pip3 uninstall django
二、创建项目
1. 创建项目
在Django
中创建项目分为以下三步:
第一步:创建项目,其命令如下:
django-admin startproject helloDjango
其中:
django-admin
是Django
的命令行管理工具,用于对Django
项目执行某些命令操作。helloDjango
是项目的名称,只要为合法的名称即可。
第二步:启动项目,命令如下:
# 切换到项目目录内
cd helloDjango#运行项目
python3 manage.py runserver
第三步:访问项目
启动浏览器,然后在地址栏输入http://127.0.0.1:8000
2. Django
项目的目录结构
创建Django
项目后,其目录结构如下:
helloDjango/
├── db.sqlite3
├── helloDjango
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
这些目录和文件的作用是:
-
最外层的
helloDjango
目录是项目的根目录,也是项目的容器 -
manage.py
是一个管理Django
项目的命令行工具,其基本用法是:python3 manage.py subcommand
subcommand
包括:runserver [addport]
,启动用于开发的轻量级的WEB
服务器
常用的端口号:
http
协议 80MySQL
的端口号 3306FTP
协议 21startapp
,在当前目录或指定目录中创建应用
-
内层的
helloDjango
目录包含项目文件,它是一个纯Python
包。 -
helloDjango/settings.py
是Django
项目的配置文件 -
helloDjango/urls.py
,URL
调度器(也称为路由配置文件) -
helloDjango/wsgi.py
,运行在WSGI
兼容的WEB
服务器上的入口
3. Django
配置
Django
的配置信息存储在settings.py
文件中。
# 当前项目的绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 密钥
SECRET_KEY = 'd!9((sy&ge3!=u0zc$u_#ba@ok1=%2pg+xnws2=t+c@s_7-(6c'# 是否开启调试模式,建议:在开发环境开启调试模式,生产环境关闭
DEBUG = True# 已安装并启用的应用程序(Application)列表
INSTALLED_APPS = [ ]# 已安装的中间件(Middleware)列表
MIDDLEWARE = []# 根 URL 调度器的完整路径
ROOT_URLCONF = `helloDjango.urls`# 模板的配置
TEMPLATES = []# 数据库配置
DATABASES = []# 语言代码
LANGUAGE_CODE = 'zh-Hans'# 时区
TIME_ZONE = 'Asia/Shanghai'
三、URL
调度器/URL
路由
为了给一个应用程序设计URL
,需要创建一个Python
模块,通常被称为URLConf( URL configuration,URL配置)
。其作用是包含 URL
模式到Python
函数(称为视图函数)的映射关系。
URL
路由三部曲:第一步:先在
urls.py
中定义路由,并且指定视图函数第二步:定义路由需要访问的
Python
函数(视图函数)第三步:通过浏览器进行访问
HttpResponse
对象位于django.http
模块内
from django.http import HttpResponse
urls.py
的代码如下:
from django.contrib import admin
from django.urls import pathfrom django.http import HttpResponsedef hello(request):return HttpResponse('<h1>Hello呀</h1>')urlpatterns = [path('admin/', admin.site.urls),path('hello/',hello),
]
此时即可以通过http://127.0.0.1:8000/hello
进行访问
1. path()
函数
path()
函数的作用是返回一个元素,以便包含在urlpatterns
中,该函数位于django.urls
模块内,其语法结构是:
path(route,view,kwargs=None,name=None)
-
route
参数是一个匹配URL
规则的字符串,当Django
在处理请求时,它会从urlpatterns
的第一项开始,按顺序依次匹配列表中的项,直到找到为止。匹配的原则是:匹配即停止 -
view
参数是一个视图函数的名称,视图函数用于处理用户的请求,并且返回响应。该视图函数必须将HttpRequest
对象作为第一个参数,参数建议以request
命名,其语法结构是:def view_function_name(request[,argument[,...]]):......
说明:
request
代表HTTP
请求对象argument
代表可选参数,表示的的是从URL
中传递的参数
-
kwargs
代表向模板传递的参数,必须在字典(dict
) -
name
代表为url
命名,以便Django
在任意地方可以唯一引用它
2. 路径转换器
Django
中的路径转换器用于捕获URL
模式中特定部分的值,并将其作为参数传递给视图函数。路径转换器包括以下几种:
-
整数,匹配
0
及其他正整数,返回int
<int:parameter_name>
,如:# urls.py中的代码def article(request,id):return HttpResponse('文章详情')urlpatterns = [path('article/<int:id>',article) ]
-
字符串,匹配除了
/
之外的任何非空字符串,直到遇到下一个斜线为止<str:parameter_name>
,如:def user(request,username):return HttpResponse(f"username is: {username}")urlpatterns = [path('admin/', admin.site.urls),path('user/<str:username>',user), ]
-
路径,匹配非空字符串,包括路径分隔符(
/
)<path:parameter_name>
,如:def detail(request,path):return HttpResponse(f"path is: {path}")urlpatterns = [path('admin/', admin.site.urls),path('detail/<path:path>',detail), ]
-
uuid
,匹配UUID
格式的字符串,其格式为8-4-4-4-12
<uuid:parameter_name>
,如:def uuid(request,id):return HttpResponse(f"uuid is: {id}")urlpatterns = [path('admin/', admin.site.urls),path('book/<uuid:id>',uuid) ]
-
slug
,匹配任何的ASCII
字母,数字、短横线及下划线,<slug:parameter_name>
3. URL
调度器/URL
路由的工作流程
强烈建议:所有的视图函数存储在
views.py
文件内。
四、总结1
1. 什么是Django
的路由系统?
Django
中的路由系统是一个将 URL
模式到Python
函数(称为视图函数)的映射关系的机制。
2. 路由系统中有哪些路径转换器?
<int:pararameter_name>
<str:paramenter_name>
<uuid:parameter_name>
<path:parameter_name>
<slug:parameter_name>
3. 路由系统中如何传递参数?
路由系统中通过路径转换器传递参数,需要强调的是:在视图函数中也必须存在同名的参数,以接收路径转换器传递来的参数。
urlpatterns = [path('user/<int:id>/name/<str:name>',userinfo)
]
对应的视图函数则需要书写成:
from django.http import HttpResponsedef userinfo(request,id,name):......
所有的视图函数必须将
HttpRequest
对象作为第一个参数传递;所有的视图函数都必须返回
HttpResponse
(HTTP响应
),该对象的构造函数结构是:HttpResponse(content=b'',content_type=None,status=200)