1、视图 url 匹配的过程
视图的功能
- 接收请求,进行处理,与 M 和 T 进行交互,返回应答
- 返回 html 内容 HttpResponse,也可能重定向 redirel
视图函数的使用
(1)定义视图函数
request 参数必须有。是一个 HttpRequest,类型的对象。参数名可以变化,但不要更改。
(2)配置 url 建立 url 和视图函数之间的对应关系。
总体回顾
- 准备工作
django-admin startproject test3
cd test3
python manage.py startapp booktest
- 修改配置文件
INSTALLED_APPS = (... 'booktest')
- 创建模板目录并配置
'DIRS': [os.path.join(BASE_DIR,'templates')],
- 数据库配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'bj18', 'USER':'root', 'PASSWORD':'123456', 'HOST':'localhost', 'PORT':3306, } }
- test3/__ init __.py
import pymysql pymysql.install_as_MySQLdb()
- 模板目录下新建 booktest 目录,并新建 index.html (初步)
<body> <h1>首页</h1> </body>
- 配置 test3/urls
url(r'^',include('booktest.urls')),
- 复制 url文件到 booktest / urls
- 配置 url 文件 并写视图函数
from django.conf.urls import url from booktest import views urlpatterns = [ url(r'^index$',views.index), ]
from django.shortcuts import render def index(request): return render(request,'booktest/index.html')
- 运行服务器
回顾2——— url 配置的完整过程
- 输入 url 地址,匹配之前 域名(127.0.0.1:8000)不要,? 及后面的参数也不参与
- 拿到 index 到项目的 urls 文件里从上到下进行匹配
- 匹配到后到 include 内的文件里进行二次匹配,匹配之前去掉匹配字符
- 到 booktest.urls 文件从上到下进行匹配,匹配到后查看对应的是哪个视图
- 执行视图函数
2、错误视图
发布网站后 要把 DEBUG
改为 False
(settings文件)
DEBUG = False
ALLOWED_HOSTS = ['*']
(1)404 找不到页面错误——url 未配置/配置错误
当访问不存在的页面时标准页面为:
也可以自定义视图模板 新建 templates/ 404.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>404错误页面</title>
</head>
<body>
<h1>页面找不到--{
{ request_path }}</h1>
</body>
</html>
(2)500 服务器端错误——视图代码出错
views.py:
标准错误页面
自定义错误页面
(3)打开调试模式查看报错
3、捕获 url 参数
进行 url 匹配时,把所需要的捕获的部分设置成一个正则表达式组,这样django 框架就会自动把匹配成功后相应组的内容作为参数**传递给视图函数
- 位置参数
参数名可以随意指定- 关键字参数:在位置参数的基础上给正则表达式组命名即可
?P<组名>
视图中参数名必须和正则表达式组名一致
urls.py
urlpatterns = [
...
url(r'^showarg(\d+)$',views.show_arg),# 位置参数
url(r'^showarg(?P<num>\d+)$',views.show_arg),# 关键字参数
]
views.py
def show_arg(request,num):
return HttpResponse(num)
4、登录案例
(1)request参数有什么作用
request 是 HttpRequest 类型的对象,包含浏览器请求的信息(请求方法get post、客户端ip地址、cookies等 相当于 application(env))
服务器接收到http协议的请求后,会根据报文创建HttpRequest对象,这个对象不需要我们创建,直接使用服务器构造好的对象就可以。视图的第一个参数必须是HttpRequest对象,在django.http模块中定义了HttpRequest对象的API。
- 属性
path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
method:一个字符串,表示请求使用的HTTP方法,常用值包括:‘GET’、‘POST’。
在浏览器中给出地址发出请求采用get方式,如超链接。
在浏览器中点击表单的提交按钮发起请求,如果表单的method设置为post则为post请求。
encoding:一个字符串,表示提交的数据的编码方式。
如果为None则表示使用浏览器的默认设置,一般为utf-8。
这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
GET:QueryDict类型对象,类似于字典,包含get请求方式的所有参数。
POST:QueryDict类型对象,类似于字典,包含post请求方式的所有参数。
FILES:一个类似于字典的对象,包含所有的上传文件。
COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串。
session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见"状态保持"。
(2)设计登录页面
url | 视图 | 模板 |
---|---|---|
/login | log_in | login.html |
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h1> get 提交的参数在 url 中