视图——url匹配过程、错误视图、捕获 url 参数、登录案例、ajax请求、ajax 同步和异步、ajax 登录案例

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 框架就会自动把匹配成功后相应组的内容作为参数**传递给视图函数

  1. 位置参数
    参数名可以随意指定
  2. 关键字参数:在位置参数的基础上给正则表达式组命名即可
    ?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 中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值