本文截图来自b站视频课程,个人觉得讲得挺清晰的,适合小白快速入门。另外还有一些自己的笔记和做的里面题目之类的,都放在一起了。2021最新版Django全套视频(django框架快速上手)_Python全栈_哔哩哔哩_bilibili
官方文档
- https://docs.djangoproject.com/en/2.2/
- 中文版 https://docs.djangoproject.com/zh-hans/2.2/
一、 项目结构
二、 配置文件
配置项名一定要大写
如果以调试模式运行,一是报错日志量太大,二是会暴露很多代码信息,因此不能用于生产环境。例如随便输一个不存在的网址
这个时区一般要改
三、 URL和视图函数
例如
Django如何处理URL的请求
匹配只关注端口/后面的部分(蓝色部分,不包括/)
四、 视图函数
五、 路由配置 path
Name主要是地址特别复杂时,用别名简化
1. 小练习1
① 首先修改路由文件 urls.py ,匹配对应字符及对应views函数
urlpatterns = [
# 默认的,不用管它
path('admin/', admin.site.urls),
# 首页,匹配 http://127.0.0.1:8000,空字符串就表示8000后什么都不加
path('', views.home_view),
# 第1页,匹配 http://127.0.0.1:8000/page/1
path('page/1', views.page1_view),
# 第2页,匹配 http://127.0.0.1:8000/page/2
path('page/2', views.page2_view)
]
- ② 建一个views文件,在里面创建3个对应的函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#@Time : 2022/6/4 14:33
#@File : views.py
from django.http import HttpResponse
# 主页对应视图函数
def home_view(request):
html = "这是我的首页"
return HttpResponse(html)
# 第1页对应视图函数
def page1_view(request):
html = "这是编号为1的网页"
return HttpResponse(html)
# 第2页对应视图函数
def page2_view(request):
html = "这是编号为2的网页"
return HttpResponse(html)
③ 启动项目
python manage.py runserver
简单测试一下
2. 小练习2
业务中一般比较常用str和int
将前面案例的页数改为path转换器实现:
① 路由规则 urls.py
urlpatterns = [
# 匹配任意页数,例如 http://127.0.0.1:8000/page/200
path('page/<int:page_num>', views.page_num_view)
]
② 视图函数
# 任意页数对应视图函数,加了一个page_num的参数
def page_num_view(request,page_num):
html = "这是编号为 %s 的网页" % page_num
return HttpResponse(html)
③ 保存,不用重启项目,立即会生效
3. 小练习3
核心在于这个路由规则:整数/字符串[add/sub/mul]/整数
① 加一条路由规则,需要3个参数
path('<int:num_1>/<str:opt>/<int:num_2>', views.calculate_view)
② 视图函数
# 小计算器
def calculate_view(request,num_1,opt,num_2):
if (opt == 'add'):
result = num_1 + num_2
elif (opt == 'sub'):
result = num_1 - num_2
elif (opt == 'mul'):
result = num_1 * num_2
else:
result = '抱歉,暂不支持该运算类型'
html = "计算结果是: %s " % result
return HttpResponse(html)
测试执行
六、 路由配置 re_path
1. 小练习4
修改一下上面的案例,只能计算不超过2位的整数,3位以上只取前两位
urls.py文件
① 先要引入re_path模块
from django.urls import path,re_path
② 配置路由规则
# 小计算器,http://127.0.0.1:8000/整数/字符串[add/sub/mul]/整数
# 这次整数部分不能超过2位,例如 http://127.0.0.1:8000/10/add/20
re_path(r'^(?P<num_1>\d{1,2})/(?P<opt>\w+)/(?P<num_2>\d{1,2})$', views.calculate_view)
解释一下这个含义:
- re_path(r'') 表示这是个正则表达式,^...$表示以什么开头和结束
- 里面还是3个参数,用/分隔
- (?P<num_1>\d{1,2}) :(?P<变量名>\匹配模式),3个变量名分别为num_1,opt,num_2
- d{1,2} 匹配 1或2位整数,w+ 匹配至少1位数字或字符
注意这个路由规则不能写到原先那条下面,因为一旦匹配到就停了。所以要么删掉之前那条,要么放到它上面。
calculate_view函数不用动,因为逻辑没有变。
跑一下
奇怪的结果出现了。。。可以猜到它应该是把20和10当成了字符串,我们再试试sub
这个报错就很明显了
2. 修正小练习
所以正则表达式匹配后返回的确实是字符串,需要我们在calculate_view函数里给它转一下。
def calculate_view(request,num_1,opt,num_2):
num_1 = int(num_1)
num_2 = int(num_2)
后面都一样
网上好多文章包括这个视频教程都只是print一下,并不能直接看出类型,所以还是得自己动手试试。