• django之视图层


    一、视图函数

         根据需求与逻辑有关的。

    http请求中产生两个核心对象:

    http请求:HttpRequest对象。

    http响应:HttpResponse对象。

    所在位置:djangohttp

    之前我们用到的参数request就是HttpRequest  检测方法:isinstance(request,HttpRequest)

    HttpRequest对象的属性:

    '''
    path:       请求页面的全路径,不包括域名
            一个字符串,表示请求的路径组件(不含域名)。
            例如:"/music/bands/the_beatles/"
    method: 请求中使用的HTTP方法的字符串表示。全大写表示。
          例如 if request.method=="GET": do_something()
             elif request.method=="POST": do_something_else()
    GET:
    一个类似于字典的对象,包含 HTTP GET 的所有参数。详情请参考 QueryDict 对象。
    POST:    一个类似于字典的对象,如果请求中包含表单数据,则将这些数据封装成 QueryDict 对象。
          POST 请求可以带有空的 POST 字典 —— 如果通过 HTTP POST 方法发送一个表单,但是表单中没有任何的数据,QueryDict 对象依然会被创建。
          因此,不应该使用 if request.POST 来检查使用的是否是POST 方法;应该使用 if request.method == "POST"
          另外:如果使用 POST 上传文件的话,文件信息将包含在 FILES 属性中。
          注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:request.POST.getlist("hobby")
    COOKIES: 包含所有cookies的标准Python字典对象;keys和values都是字符串。 
    FILES: 包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中 name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
        filename: 上传文件名,用字符串表示
        content_type: 上传文件的Content Type
        content: 上传文件的原始内容
    user: 是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前 没有登陆,
        user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你
        可以通过user的is_authenticated()方法来辨别用户是否登陆: if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware
        时该属性才可用
    session: 唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
    '''

     HttpResponse对象:

    HttpRequest对象是django自动创建的,在视图函数里形参request是直接接收的,是django传过来的,django会把前端所有的信息打包好给这个对象传给视图函数。

    HttpResponse对象使我们自己创建的,HttpResponse是个类,类加括号就是在实例化一个对象。

    每一个view请求处理方法都必须返回一个HttpResponse对象,因为这是给前端看的内容。

    响应对象主要有三种形式:

    • HttpResponse()
    • render()
    • redirect()

    HttpResponse()括号内直接跟一个具体的字符串作为响应体,比较直接很简单,所以这里主要介绍后面两种形式。

    render 函数

    render(request, template_name,[context])

    结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

    参数:
         request: 用于生成响应的请求对象。
    
         template_name:是一个路径,要使用的模板的完整名称,可选的参数
    
         context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
    

    locals()方法

    如果一个逻辑里面有很多变量,可以用locals()本地变量的意思,仅仅需要把 locals()方法放到渲染的参数位置上。

    def index(request):
        name = 'zhangrenguo'
        age = 18
        return render(request,'index.html',locals())

    然后在html文档里用的时候直接写变量名。

    <h1>locals的用法{{ name }}</h1>
    <h1>直接在HTML里写变量名{{ age }}</h1>

    redirect()

    redirect()重定向,页面跳转用的。

    redirect(url),走url路径,执行对应的函数。

    登录的时候一般都用redirect()。

    例子里我们用了路由分发: 

    render和redirect的区别?

    1

  • 相关阅读:
    392 单页面应用程序概述
    391 vue $refs:vue获取组件、DOM元素
    使用这些 CSS 属性选择器来提高前端开发效率!
    WEB网站常见受攻击方式及解决办法
    能用HTML/CSS解决的问题就不要使用JS
    两张图解释CSS动画的性能
    20个编写现代CSS代码的建议
    微信小程序之下载(下载文件tempFilePath后缀unknown)
    使用typescript构建Vue应用
    Vue模板语法、事件和表单使用
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/10747870.html
Copyright © 2020-2023  润新知