django 视图

这篇博客详细介绍了Django视图的概念、url配置、视图函数的定义及其参数,包括错误视图的处理。此外,还探讨了HTTP协议的无状态特性,以及Django中如何实现状态保持,如cookie和session的使用,包括session的配置和过期时间设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视图

概述

  • 作用
    • 视图接受web请求,并响应web请求
  • 本质
    • 视图就是一个python中的函数
  • 响应
    • 网页
    • 重定向
    • 错误视图404 ,500 ,400
    • JSON数据

url配置

  • 配置流程
    • 制定根级url配置文件
      • settings.py文件中的ROOT_URLCONF
      • ROOT_URLCONF = 'project.urls'
      • 默认实现了
  • urlpatterns
    • 一个url实例的列表
    • url对象
      • 正则表达式
      • 视图名称
      • 名称
  • url匹配正则的注意事项 - 如果想要从url中获取一个值,需要对正则加小括号 - 匹配正则前方不需要加反斜杠 - 正则前需要加r表示字符串不转义
  • 配置
    • 在应用中创建urls.py文件,定义本应用的url配置,在工程urls.py文件中使用include()方法 -工程urls.py文件
    from django.conf.urls import url, include 
    from django.contrib import admin 
    urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include('myApp.urls', namespace="myApp"))
    ]

应用中urls.py文件

    from django.conf.urls 
    import url from . import views 
    urlpatterns = [ 
    url(r'^$', views.index, name="index"), 
    ]
  • URL的反向解析
    • 概述
      • 如果在视图、模板中使用了硬编码链接,在url配置发生改变时,动态生成链接的地址
    • 解决
      • 在使用链接时,通过url配置的名称,动态生成url地址
    • 作用
      • 使用url模板

视图函数

  • 定义视图
    • 本质:一个函数
  • 视图参数
    • 一个HttpRequest的实例
    • 通过正则表达式获取的参数 -位置
    • 一般在views.py文件下定义
  • 错误视图
    • 500视图在视图代码中出现错误(服务器代码)
    • 400视图 错误出现在客户的操作
    • 404视图
      • 配置settings.py
        • DEBUG如果为True永远不会调用404.html页面
        • ALLOWED_HOSTS = ['*']
      • 找不到网页(url匹配不成功)时返回
      • 在templates目录下定义404.html
<!DOCTYPE html> 
<html lang="en">
<head> 
<meta charset="UTF-8"> 
<title>404页面</title> 
</head> 
<body> 
<h1>页面丢失</h1> 
<h2>{{request_path}}</h2> 
</body> </html>

request_path导致错误的网址

  • HttpRequest对象
    • 概述
      • 服务器接收http请求后,会根据报文创建HttpRequest对象
      • 视图的第一个参数就是HttpRequest对象
      • django创建的,之后调用试图时传递给视图
    • 属性
属性含义
path请求的完整路径(不包括域名和端口)
encoding表示浏览器提交的数据的编码方式一般为utf-8
GET类似字典的对象,包含了get请求的所有参数
POST类似字典的对象,包含了post请求的所有参数
FILES类似字典的对象,包含了所有上传的文件
COOKIES字典,包含所有的cookie
session类似字典的对象,表示当前会话
  • 方法
    • is_ajax()
      • 如果是通过XMLHttpRequest发起的,返回True
  • QueryDict对象
    • request对象中的GET、POST都属于QueryDict对象
    • 方法
      • get()
        • 作用:根据键获取值
        • 只能获取一个值
        • www.sunck.wang/abc?a=1&b=2&c=3
      • getlist()
        • 将键的值以列表的形式返回
        • 可以获取多个值
        • www.sunck.wang/abc?a=1&a=2&c=3
  • GET属性
 def get1(request): 
    a = request.GET.get('a') 
    b = request.GET['b'] 
    c = request.GET.get('c') 
    return HttpResponse(a + " " + b + " " + c)

http://127.0.0.1:8000/app/get1?a=1&a=2&c=3

def get2(request): 
    a = request.GET.getlist('a') 
    a1 = a[0] 
    a2 = a[1] 
    c = request.GET.get('c') 
    return HttpResponse(a1 + " " + a2 + " " + c)
  • POST属性
    • 使用表单提交实现post请求
  def showregist(request): 
  return render(request, 'myApp/regist.html') 
  def regist(request): 
  name = request.POST.get("name") 
  gender = request.POST.get("gender") 
  age = request.POST.get("age") 
  hobby = request.POST.getlist("hobby") 
  return HttpResponse("post")
  • 关闭csrf
 MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
 ]
  • HttpResponse对象
    • 概述
      • 给浏览器返回数据,HttpRequest对象是由django创建的,HttpResponse对象由程序员创建
    • 返回用法
      • 不调用模板,直接返回数据

状态保持

  • 概述
    • http协议时无状态的,每次请求都是一次新的请求,不记得以前的请求
    • 客户端与服务器端的一次通信就是一次会话
    • 实现状态保持,在客户端或者服务端存储有关会话的数据
    • 存储方式
  • cookie 所有的数据存储在客户端,不要存敏感的数据
  • session所有的数存储在服务端,在客户端用cookie存储session_id
  • 状态保持的目的
    • 在一段时间内跟踪请求者的状态,可以实现跨页面访问当前的请求者的数据
  • 注意
    • 不同的请求者之间不会共享这个数据,与请求者一一对应的 6.2 启用session settings文件中
    • INSTALLED_APPS
    • 'django.contrib.sessions',
    • MIDDLEWARE
    • 'django.contrib.sessions.middleware.SessionMiddleware',
  • 使用session
    • 启用session后,每个HttpRequest对象都有一个session属性,就是一个类似字典的对象
  • get(key, default=None)根据键获取session值
  • clear()清空所有的会话
  • flush() 删除当前的会话并删除会话的cookie
  • 设置过期时间
    • set_expiry(value)
    • 如果不设置,两个星期后过期
    • request.session.set_expiry(10)
    • 0关闭浏览器时失效
    • None永不过期
  • 存储session的位置默认存储在数据库中SESSION_ENGINE = 'django.contrib.session.backends.db'
  • 缓存只存储在本地内存中,如果丢失不能找回,比数据库快
    • SESSION_ENGINE = 'django.contrib.session.backends.cache'
  • 数据库和缓存优先从本地缓存中读取,读取不到再去数据库中获取
    • SESSION_ENGINE = 'django.contrib.session.backends.cached_db' 6.6 使用redis缓存session
pip install django-redis-sessions
  SESSION_ENGINE = 'redis_sessions.session' 
  SESSION_REDIS_HOST = 'localhost' 
  SESSION_REDIS_PORT = 6379 
  SESSION_REDIS_DB = 0 
  SESSION_REDIS_PASSWORD = 'sunck' 
  SESSION_REDIS_PREFIX = 'session'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值