zoukankan      html  css  js  c++  java
  • Django view(视图)

    在Django MTV模式中,View视图负责业务逻辑部分,路由系统接收到HTTP请求,并将任务分配给相应的视图函数,由视图函数来负责响应这个请求。无论视图本身包含什么逻辑,都要返回响应。

    在这里HTTP请求中产生两个核心对象:

    • HTTP请求:HttpRequest对象
    • HTTP响应:HttpResponse对象

    所在位置:django.http

    在Django项目中,一个app内的视图函数都放在views.py中

    def register(request): # 一个视图函数
        print(request)

    HttpRequest对象的属性和方法

    request.path   获取路径
    request.get_full_path()   带数据的路径
    request.method   请求方式("POST"/"GET")
    request.GET        包含所有HTTP GET参数的类字典对象
    request.POST      包含所有HTTP POST参数的类字典对象
        name = request.POST.get("user")  获取提交的数据(form表单中name属性为user的 用户输入文本值)
        pwd = request.POST.get("pwd")(form表单中name属性为pwd的 用户输入的文本值)
    
    服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用
    if request.POST来判断是否使用了HTTP POST 方法;应该使用  if request.method=="POST"
    
    request.COOKIES     包含所有cookies的标准Python字典对象;keys和values都是字符串。
    FILES:      包含所有上传文件的类字典对象;FILES中的每一个Key都是<input type="file" name="" />标签中name属性的值,FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys:
        filename:      上传文件名,用字符串表示
        content_type:   上传文件的Content Type
        content:       上传文件的原始内容
    
    request.user       是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。
    你可以通过user的is_authenticated()方法来辨别用户是否登陆:if req.user.is_authenticated();只有激活Django中的AuthenticationMiddleware时该属性才可用
    
    request.session    唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。
    
    request.META       包含了所有本次HTTP请求的Header信息,是一个python字典。这个字典中常见的键值有:
        HTTP_REFERER    进站前链接网页,可以用来统计网站流量来源。 (请注意,它是REFERRER的笔误)
        HTTP_USER_AGENT     用户浏览器标识,可以获知浏览器的型号版本等信息。
        REMOTE_ADDR     客户端IP(如果申请是经过代理服务器的话,那么它可能是以逗号分割的多个IP地址)

    HttpResponse对象的属性和方法

    页面渲染: 推荐用render(request,"模板.html",{})  第三个参数可以是键值对,也可以是locals()函数
    页面跳转:   redirect("路径")
    locals()   可以直接将函数中所有的变量传给模板
    
    render和redirect的区别:
        redirect跳转将会使url发生改变,而render不会改变。要在合适的时候使用redirect

    示例:

    url.py中:
     url(r"login",   views.login),
     url(r"yse",   views.yes),
    
    views.py中:    
        def login(request):
            if request.method == "POST":
                if request.POST.get("user") == "alex" and request.POST.get("pwd") == "666":
                    return redirect("/yes/")
            return render(request,"login.html",locals())
        def yes(request):
            name = "alex"
            return render(request,"yes.html",locals())
    
    login.html中:
    <form action="/register/" method="post">
         <div class="input">
              <input type="text" class="inputs" placeholder="用户名" name="user">
         </div>
         <div class="input">
               <input type="password" class="inputs" placeholder="密码" name="pwd">
          </div>
          <input type="button" class="button" value="注册">
    </form>
    yes.html中:
    <h1>{{ name }}你好!</h1>
    
    总结: render和redirect的区别:
    1. render的页面需要模板语言渲染,即需要将数据库的数据加载到html,那么所有的这些数据除了写在yes的视图函数中,必须还要写在login中,代码重复,没有解耦.
    2. 最重要的: url没有跳转到/yes/,而是还在/login/,所以当刷新后又得重新登录。
    

      

  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/V587Chinese/p/9770100.html
Copyright © 2011-2022 走看看