DjangoMTV知识点总结之视图

本文深入探讨Django框架中的视图概念,详细解释视图如何接收和响应Web请求,包括视图函数的定义、请求处理流程、URL配置与反向解析、HTTP请求与响应对象的使用,以及状态保持的实现。

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

视图:
视图接受web请求,并相应web请求。本质是一个python的函数。
响应有:--->网页:重定向,错误视图
    --->json数据
响应的过程:--->浏览器:用户在浏览器中输入网址:http://127.0.0.1/students/1 ---> 输出:网址
    --->django框架:获取网址信息,去除IP和端口:students/1 ---> 输出:虚拟路径和文件名
    --->URL管理器:把网址给URL管理器,逐个匹配urlpatterns,匹配成功执行对应的视图函数 ---> 输出:函数名
    --->视图管理器:找到对应的视图去执行,返回结果给浏览器 --->输出:响应的数据
URL的配置:--->指定根级URL:主项目的settings.py中:ROOT_URLCONF = 'mysite.urls',mysite是主项目的名称
    --->urlpatterns:一个url实例的列表,保存的是url(url正则表达式,视图,名称)的url对象,例:
        需要注意:
        --->如果想从url中获取值,需要在正则表达式中用小括号包围值的部分
        --->正则表达式开始的地方不要加'/',在结尾的地方加‘/',这样子项目可以更准确的写正则表达式,这是一种写法习惯
        --->正则表达式前加r,利用python语法,可以不加转义
    --->引入其他URL的配置:在子项目中创建urls.py文件,在里面定义本项目的url匹配,在主项目的urls.py中include(子项目.urls)
        例:主项目的urls.py中:urlpatterns = [path(r'', include('myApp.urls', namespace='myApp'))]
URL的反向解析:如果在视图、模板中使用了硬编码链接,在url配置发生改变时,动态生成链接的地址
    --->使用:在使用链接时,通过url配置的名称,动态生成url地址
视图函数:参数列表的第一个参数固定是一个HTTPRequest的实例,后面的参数是通过url的正则表达式小括号获取
    --->一般在项目的views.py下定义
    --->错误视图:--->404:url匹配不成功找不到网页。在template目录下定义404.html,所有网页的404都可以使用。匹配失败是会给404页面传入request_path参数,代表实际请求的url。配置settings.py:1.DEBUG:如果为True,不会调用404页面,而是返回错误原因,生产环境用False返回404页面,2.ALLOWED_HOSTS=['*'],列表中的网址可以转到404页面。
        --->500:服务器发生错误,
        --->400:错误发生在客户的操作
HTTPRequest对象:服务器接收到HTTP请求后,框架会根据报文产生该对象,传给视图函数。
    --->属性:--->path:请求的完整路径,不包括域名和端口
        --->method:请求的方式:post,get
        --->encoding:浏览器提交的数据的编码方式
        --->GET:类似于字典的对象,包含了GET请求的所有参数
        --->POST:类似于字典的对象,包含了POST请求的所有参数
        --->FILES:类似于字典的对象,包含了所有上传的文件
        --->COOKIES:字典,包含所有的cookie
        --->session:类似于字典的对象,表示当前会话
    --->方法:--->is_ajax():如果是通过XMLHTTPRequest发起的,返回True。如果是ajax请求,一般返回json数据。
    --->QueryDict对象:request对象中的GET,POST都属于QueryDict对象。
        --->方法:get();根据键获取一个值,比如get请求是URL中的参数
            --->getlist():根据一个键获取多个值
    --->GET属性:通过url提交的请求参数
        --->形如:http://127.0.0.1:8000/?a=1&b=2&c=3  可以用get()获取单独的每个值
        --->形如:http://127.0.0.1:8000/?a=1&a=2&c=3 可以用getlist('a')获取键为'a'的多个值,返回列表
    --->POST属性:通过表单提交的请求参数
HTTPResponse对象:给浏览器返回数据,由开发人员创建    
    --->不调用模板,直接return HttpResponse('')
    --->调用模板:使用render方法:render(request, templateName[, params]),结合数据和模板,返回渲染好的网页
    --->属性:--->content:返回的文本内容(html文件内容)
        --->charset:返回的编码格式
        --->status_code:返回的请求状态,如200,404
        --->content-type:返回的MIME类型
    --->方法:--->init():使用页面内容实例化HTTPResponse对象
        --->write(content):以文件的形式写入
        --->flush():以文件的形式输出到缓冲区
        --->set_cookie(key, value, marge=None, exprise=None):设置cookie
        --->delete_cookie():删除cookie,如果删除不存在的cookie,不会有任何影响
    --->子类:--->HTTPResponseRedirect:重定向请求,在url匹配中添加url1和url2,在view1中HTTPResponseRedirect('/view2')重定向到view2,由view2返回网页
        --->JsonResponse:返回json数据,用于返回异步请求,如ajax请求,参数data是字典类型,此时Content-Type='application/json'
状态保持:可以用session保存状态,在浏览器cookie保存sessionid,在服务端Django框架在数据库保存sessionid对应的数据,当用户登录后在不同页面切换时,sessionid保持不变,实现状态保持
    --->启用session:settings.py中:INSTALLED_APPS=['django.contrib.sessions'],MIDDLEWARE =['django.contrib.sessions.middleware.SessionMiddleware']
    --->使用session:--->启用session后,每个HTTPRequest对象都有一个session属性,是一个类似于字典的对象
        --->session.get(key, default=None):根据键获取session值
        --->session.clear():清空session
        --->session.flush():退出登录
    --->退出登录:django.contrib.auth.logout(request),退出该请求的登录
        --->session.set_expiry(num):num时间后session过期
        --->session.set_expiry(datetime):时间点后session过期
        --->None,永不过期
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值