Django框架03 /视图相关

1. 请求相关

  • HTTPRequest对象

    1. HTTPRequest对象就是咱们的视图函数的参数request
    2. 当一个页面被请求时,Django就会创建一个包含本次请求原信息(请求报文中的请求行、首部信息、内容主体等)的HttpRequest对象。
    3. Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
  • 请求相关的常用值

    path_info
    # 返回用户访问url,不包括域名 method
    # 请求中使用的HTTP方法的字符串表示,全大写表示 GET
    # 包含所有HTTP GET参数的类字典对象 POST
    # 包含所有HTTP POST参数的类字典对象 body
    b'name=python&price=123.00'
    # 请求体,byte类型 request.POST的数据就是从body里面提取到的
  • 属性

    print(request)   # <WSGIRequest: GET '/home/'>
    print(dir(request)) print(request.path) # /home/ 纯路径
    print(request.path_info) # /home/ 纯路径
    print(request.get_full_path()) # /home/?a=1&b=2 全路径(不包含ip地址和端口) print(request.META) # 请求头相关数据,是一个字典 print(request.method) # GET print(request.GET) # <QueryDict: {}> QueryDict对象存储GET相关数据 print(request.POST)
    print(request.body) # 能够拿到请求数据部分的数据(post有,get没有)

2.响应相关

  • HTTPResponse对象

    # 返回字符串
    HTTPResponse('字符串') # 返回页面
    render(request,'xx.html') # 重定向
    redirect 重定向
    # 用法:redirect(路径)/ redirect(别名)
    # 示例:redirect('/index/')
  • 重定向/301/302

    1. 301和302的区别

      • 相同点:

        • 301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)
      • 不同点:
        • 301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址
        • 302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
    2. 重定向原因:
      • 网站调整(如改变网页目录结构)
      • 网页被移到一个新地址
      • 网页扩展名改变(如应用需要把.php改成.Html或.shtml)
      • 这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点
    3. 临时重定向(响应状态码:302)和永久重定向(响应状态码:301)对普通用户来说是没什么区别的,它主要面向的是搜索引擎的机器人
      • A页面临时重定向到B页面,那搜索引擎收录的就是A页面
      • A页面永久重定向到B页面,那搜索引擎收录的就是B页面

3.FBV和CBV 视图(视图函数和视图类)

3.1 类视图 CBV

  • views.py

    from django.views import View
    class LoginView(View): def dispatch(self, request, *args, **kwargs):
    print('请求来啦!!!!')
    ret = super().dispatch(request, *args, **kwargs)
    print('请求处理的逻辑已经结束啦!!!')
    return ret
    def get(self,request):
    print('get请求')
    return render(request,'login.html') def post(self,request):
    print(request.POST)
    return HttpResponse('登录成功') # 处理get/post请求直接定义get/post方法,不需要自己判断请求方法了,源码中用dispatch方法中使用了反射来处理的
  • urls.py路由写法

    url(r'^login/', views.LoginView.as_view()),

3.2 视图函数 FBV

  • views.py

    def login(request,*args,**kwargs):
    if request.method == 'GET':
    return render(request,'login.html')
    elif request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')
    if username == 'zhangsan' and password == '123':
    return render(request,'index.html')
  • urls.py路由写法

    url(r'^login/', views.login),

3.3 视图加装饰器

  • 代码示例:

    # 装饰器
    def wrapper(func):
    def inner(*args, **kwargs):
    print(11111)
    ret = func(*args, **kwargs)
    print(22222)
    return ret
    return inner # 视图函数
    @wrapper
    def index(request):
    print('index')
    return HttpResponse('indexxxxxxxxx') # 视图类
    from django.utils.decorators import method_decorator
    @method_decorator(wrapper,name='get') #方式3 class LoginView(View):
    @method_decorator(wrapper) #方式2
    def dispatch(self, request, *args, **kwargs)
    print('请求来啦!!!!') ret = super().dispatch(request, *args, **kwargs) print('请求处理的逻辑已经结束啦!!!')
    return ret
    @method_decorator(wrapper) #方式1
    def get(self,request):
    print('get请求')
    return render(request,'login.html') def post(self,request):
    print(request.POST)
    return HttpResponse('登录成功')
  • 添加装饰器的三种方式

    • 方式1:

      添加在每一个函数中
    • 方式2:

      直接添加在dispatch里面,这样每个函数都会执行
    • 方式3:

      直接添加在类上,后面的name表示只给get添加装饰器

      以这种方式如果想给多个方法加装饰器,需要写多层装饰器,因为name这个参数的值必须是个字符串,并且不能同时写两个方法
  • 注意:

    1. 添加装饰器前必须导入from django.utils.decorators import method_decorator
    2. 添加装饰器的格式必须为@method_decorator(),括号里面为装饰器的函数名
    3. 给类添加时必须声明name

Django框架03 /视图相关的更多相关文章

  1. Django框架04 /模板相关、别名/反向解析/路由分发

    Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...

  2. django框架-DRF视图中的request和response

    1.Request 相对于django框架,DRF工程的request类则是继承自HttpRequest类,Rest framework提供了parser解释器,用来解释请求中的content_typ ...

  3. Django框架简介-视图系统

    2.3 视图系统 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档 ...

  4. Django框架1——视图和URL配置

    三个命令 1.创建一个django项目 在cmd中:django-admin.py startproject project_name D:\python\django_site>django- ...

  5. django框架基础-视图系统-长期维护

    ##################   什么是视图?     ####################### 视图: 1,一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受W ...

  6. Django 框架之视图函数(Views)

    http请求中产生的两个核心对象: http请求: HttpRequest对象 http响应: HttpResponse对象 所在位置: django.http HttpRequest 对象的属性和方 ...

  7. [Django框架之视图层]

    [Django框架之视图层] 视图层 Django视图层, 视图就是Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来专门处理客户端访问请求后处理请求并且返回相应的数据,相 ...

  8. Django框架 之 view视图

    Django框架 之 view视图 浏览目录 概述 简单的视图 HttpRequest对象 CBV和FBV 给视图加装饰器 Request对象 Response对象 JsonResponse对象 Dj ...

  9. Python的Django框架中的Cookie相关处理

    Python的Django框架中的Cookie相关处理 浏览器的开发人员在非常早的时候就已经意识到. HTTP's 的无状态会对Web开发人员带来非常大的问题,于是(cookies)应运而生. coo ...

随机推荐

  1. 【转载】有人出天价买他的一个文案标题,今天10min教会你……

    目录 1. 套路 1:新闻社论 2. 套路 2:好友对话 3. 套路 3:实用锦囊 4. 套路 4:惊喜优惠 5. 套路 5:意外故事 本文由 简悦 SimpRead 转码, 原文地址 https:/ ...

  2. 一文梳理JS事件

    JavaScript与HTML的交互是通过事件进行的.事件,就是文档或浏览器窗口发生的一些特定的交互瞬间. 事件流 事件捕获 事件冒泡 事件处理程序 事件委托 1. 事件流 如果单机页面上的某个按钮, ...

  3. JDBC——什么是JDBC?

    JDBC:Java数据库连接(Java DataBase Connectivity),是Java语言中用来规范客户端如何程序如何来访问数据库的应用程序接口(API),提供了诸如查询和更新数据库中数据的 ...

  4. HTTP Request Smuggling 请求走私

    参考文章 浅析HTTP走私攻击 SeeBug-协议层的攻击--HTTP请求走私 HTTP 走私漏洞分析 简单介绍 攻击者通过构造特殊结构的请求,干扰网站服务器对请求的处理,从而实现攻击目标 前提知识 ...

  5. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 4. 深层神经网络)

     =================第2周 神经网络基础=============== ===4.1  深层神经网络=== Although for any given problem it migh ...

  6. JavaWeb网上图书商城完整项目--过滤器解决中文乱码

    我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding(“utf-8”)方法来设计编码:如果是GET请求,我们需要自己手动来处理编码问题.如果我们使用了En ...

  7. JavaWeb网上图书商城完整项目--day02-21.退出功能的实现

    1.当用户点击退出的时候,跳转到登陆页面 当用户点击退出的时候,需要将session中保存的登陆的用户销毁掉 当用户点击退出的时候,调用UserServlet的quit方法 退出按钮在top.jsp中 ...

  8. java 中的 自定义viewUtils框架

    在前面学习的基础上,我们自己编写一个ViewUtils注解框架类,不清楚的原理看前面的源代码 package im.weiyuan.com.viewutils; import android.supp ...

  9. Spring-AOP:一、注解demo及基本概念

    切面:Aspect 切面=切入点+通知.在老的spring版本中通常用xml配置,现在通常是一个类带上@Aspect注解.切面负责将 横切逻辑(通知) 编织 到指定的连接点中. 目标对象:Target ...

  10. 关于MySQL事务和存储引擎常见FAQ

    1.什么是事务? 事务就是「一组原子性的SQL查询」,或者说一个独立的工作单元.如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询.如果其中有任何一条语句因为崩溃或其他原因无法 ...