zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    聚簇索引和非聚簇索引(通俗易懂 言简意赅)
    Java-线程池专题(什么是线程池,如何使用,为什么要用)
    在Spring Boot中动态实现定时任务配置
    面试被问:如果系统 CPU 突然飙升且 GC 频繁,你该如何排查?
    深入理解volatile
    redis3.0常用命令
    redis3.0配置文件详解
    mysql max_allowed_packet 设置过小导致记录写入失败
    linux 项目部署问题
    python sokct 包详解
  • 原文地址:https://www.cnblogs.com/zhangrenguo/p/10747870.html
Copyright © 2011-2022 走看看