要注意django 版本的 与 Python的版本的搭配,我用的是python3.8 和 django 2.2.1
路由配置
1.path()函数
- 在创建项目中的urls.py 里
# 1.导入from django.urls import path
# 2.语法-path(route, views, name=None)
# 3. 参数
route:字符串类型。匹配的请求路径
views:指定路径所对应的视图处理函数的名称
name:为地址起别名, 在模板中地址反向解析时使用
path- 传唤起
- 语法:<传唤起类型:自定义名>
- 作用:若转换器类型匹配对应类型的数据。则将数据按照关键字传参的方式传递给视图函数
- 例子:path ('path/int:page', views.xxxx)
- 例子
- 在项目中的urls.py :
path('page/<int:pg>', views.pagen_view),
先要引入
from . import view
- 在项目中veiws.py 中:
def pagen_view(request, pg):
html = '这是编号为%s的网页' % (pg)
return HttpResponse(html)
但是呢在这文件里先引入
from django.http import HttpResponse, request
运行
# 这里的端口设置为9999
python manage.py runserver 9999
- 输入整数就ok ,随便你输入只要是整数
小练习(小计算器)
- 定义一个路由的格式为:
- http://127.0.0.1:9999/整数/操作字符串[add/sud/mul]/整数
- 从路由中提取数据,做出相应的操作返回给浏览器
- 效果如下:
- 输入:127.0.0.1:9999/100/add/200
- 页面显示结果:300
# views.py
def cal_view(request, n, op, m):
if op not in ['add', 'sub', 'mul']:
return HttpResponse('your op is wrong')
result = 0
if op == 'add':
result = n + m
elif op == 'sub':
result = n - m
elif op == 'mul':
result = n * m
return HttpResponse('结果为:%s' % (result))
# urls.py
urlpatterns = {
path('<int:n>/<str:op>/<int:m>', views.cal_view),
}
2.re_path()
- 在url 的匹配过程中可以使用到正则表达式进行精准匹配
- 语法:
- re_path(reg, view,name== xxx)
- 正则表达式为命名分组模式(?Ppattern); 匹配提取参数后用关键字传参方式传递给视图函数
- 例子
# 可匹配 http://127.0.0.1:8000/20/mul/40
# 不可匹配 http://127.0.0.1:800/200/mul/400
urlpatterns= [
path('admin/', admin.site.urls),
re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)\(?P<y>\d{1,2})$', views.cal_view),
]
- 练习
- 效果样列:
- http:// 127.0.0.1:9999/birthday/四位数字/一到两位数字/一到两位数字
- http:// 127.0.0.1:9999/birthday/一到两位数字/一到两位数字/四位数字
URL和视图函数
URL-结构
- 定义-即统一资源定位符Uniform Resource Locator
- 作用- 用来表示互联网上某个资源的地址
- URL的一般语法格式为(注:[]代表其中的内容可省略):
- protocol://hostname[:port]/ path[?query] [#fragment]
- txxx.xxxx.cn/video/showV…
protocol(协议) xxx.xx.com
- http 通过HTTP访问该资源。格式http://
- https 通过安全的HTTPS访问该资源、 格式https://
- file 资源是本地计算机上的文件。 格式:file:///
hostname(主机名)
- 是指存放资源的服务器的域名系统(DNS)主机名、 域名 或 IP地址
port(端口号)
- 整数、 可选、 省略时使用方案的默认端口
- 各种传输协议都有默认的端口号。
path(路由地址)
- 由零或多个”/'' 符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。路由地址决定了服务器端如何处理这个请求
query(查询)
- /video/showVideo?menuld=657421&vaersion=AID999
- 可选。用于给动态网页传递参数, 可有多个参数, 用‘’‘&’‘ 符号隔开, 每个参数的名和值用“=” 符号隔开。
fagment(信息片段)
-version = AID 9999 # subject
- 字符串,用于指定网络资源中的片段。例如一个网页中有多个名词解释, 可以使用fragment 直接定位到某名词解释
Django 如何处理URL的请求
处理URL请求
- 浏览器地址栏--> http://127.0.0.1:8000/page/2003/
-
1.Django 从配置文件中根据ROOT_URLCONF 找到主路路由文件;默认情况下。该文件在项目同名目录下的urls;例如mysite1/mysite1/urls.py
-
2.Django加载主路由文件中的urlpattrens变量[包含很多路由的数组]
-
3.依次匹配 urlpatterns 中的path,匹配到第一个合适的中断后续匹配
-
4.匹配成功-调用对应的视图函数处理请求,返回响应
-
5.匹配失败- 返回404响应
-
视图函数
- 视图函数是用于接收一个浏览器请求(HttpRequset对象)并通过HttpResponse对象返回响应的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的响应内容给浏览器
- 语法
def xxx_view(request[, 其它参数....])
return HttpResponse 对象
- 例子
# file:<项目同名文件夹下>/ views.py
from django.http import HttpResponse
def page1_view(request):
html = '<h1>这是第一个页面</h1>'
return HttpResponse(html)