Django学习笔记(三)——Views专题

    技术2022-07-10  138

    视图(Views)

    作用:接收web请求,并响应web请求。 本质:就是python中的函数。 响应内容:①网页、重定向、错误视图(404,500)②json数据

    响应过程:

    1、用户在浏览器输入网址 2、django获取网址信息,去除IP和端口号 3、url管理器逐个匹配url conf 4、若匹配成功,则执行对应的视图函数 5、视图管理器找到对应视图并执行,返回结果给浏览器

    url配置

    流程:

    1、指定根级url文件(settings.py中设置。)

    # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/'

    2、project/urls.py中的urlpatterns中是一个url实例的列表。 每个对象都包括 正则表达式、视图名称和namespace。

    3、引入其他url配置文件,在project/urls.py中使用include方法

    from myapp import urls urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^chendw/', include('myapp.urls', namespace="myapp")) ]

    url配置正则需注意

    1、若要从url中获取值,则需要对正则加小括号

    url(r'^(\d+)/$', views.detail), # 正则表达式

    2、匹配正则前方不需要加 ‘/’反斜杠 3、正则前需要加‘r’,表示字符串不转义

    视图函数

    定义试图(本质为函数)

    参数: 第一个,HttpRequest的对象实例 第二个,通过正则表达式获取

    def detail(request, num): return HttpResponse("detail -%s" %num)

    位置: 一般在views.py中定义

    错误视图: 500 在视图代码中出错 400 错误出现在客户的操作 404 找不到网页(url匹配失败) 以上错误视图均可自己定义,在template目录下定义,并在settings.py中进行配置。(注释掉默认的错误视图)

    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', ]

    HttpRequest对象(由django创建)

    服务器接受http请求后,会根据报文创建HttpRequest对象,视图函数中第一个参数就是HttpRequest对象。

    对象属性
    属性内容path请求的完整路径method请求的方式,如GET,POSTencoding编码方式GET类似字典对象,包含了get对象的各个参数POST类似字典对象,包含了post对象的各个参数FILES类似字典对象,包含上传文件参数COOKIES类似字典对象,包含了所有cookiessession表示当前会话

    HttpResponse对象(由程序员创建)

    用于给浏览器返回数据

    用法:

    1、不调用模板,直接返回数据

    def index(request): return HttpResponse("chendw is good man")

    2、调用模板,使用render()方法渲染

    def grades(request): # 去模板里取数据 grades_list = Grades.objects.all() # 将数据传给模板 return render(request, 'myapp/grades.html', {"grades": grades_list})
    render()方法

    原型: render(request,template,{context}) 作用:结合数据和模板,返回完整html页面

    对象属性
    属性内容content表示返回完整地内容charset编码格式status-code响应状态码content-type指定输出MIME类型
    方法
    方法功能init使用页面内容实例化HttpResponse对象write(content)以文件形式输入flush()以文件形式输出缓冲区set_cookie(key,value,max_age,expires)设置cookiedelete_cookie(key)删除cookie
    子类

    HttpResponseRedirect 重定向,服务器跳转

    from django.http import HttpResponseRedirect # redirect def redirecttest1(request): return HttpResponseRedirect('/chendw/redirect2')

    Session状态保持

    概述: Http协议是无状态的,每次请求都是新的请求。 服务器与客户端的一次通信,就是一个新的会话。 实现状态保持,由客户端或服务器存储。 存储方式包括:cookie或session。

    目的: 在一段时间内跟踪请求者的状态,可以实现跨页面访问请求者数据,但不同请求者直接的数据不共享。

    启用

    settings.py文件中的INSTALLED_APP和MIDDLEWARE字段中配置。

    INSTALLED_APPS = [ 'django.contrib.sessions', ] MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', ]
    使用

    每个HttpRequest对象都有一个session属性,是一个类似字典的对象。通过调用session对象进行调用。

    def main(request): username = request.session.get('name', "游客") return render(request, 'myapp/main.html',{'name': username}) def login(request): return render(request,'myapp/login.html') def showmain(request): username = request.POST.get('username') request.session['name'] = username request.session.set_expiry(10) return redirect('/chendw/main/') from django.contrib.auth import logout def quit(request): # logout(request request.session.clear() return redirect('/chendw/main')
    设置过期时间
    request.session.set_expiry(10)

    若不设置,则默认两周后过期。 参数可选:

    参数效果None永不过期整数秒时间对象指定日期过期0关闭浏览器过期
    存储session的位置

    1、默认为数据库存储session

    # 数据库保存session SESSION_ENGINE = 'django.contrib.session.backends.db'

    2、使用缓存保存session,只保存在内存中,若丢失则无法恢复,但相比数据库访问速度较快。

    # 缓存保存session SESSION_ENGINE = 'django.contrib.session.backends.cache'

    3、数据库和缓存并用保存session,优先读取缓存,若无则寻找数据库。

    # 缓存和数据库保存session SESSION_ENGINE = 'django.contrib.session.backends.cached_db'
    Processed: 0.013, SQL: 9