zoukankan      html  css  js  c++  java
  • Django--视图views

    1、什么是视图?

      视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。

      视图函数如图所示:

    from django.shortcuts import render, HttpResponse, redirect
    
    # Create your views here.
    
    def index(request):
        import datetime
        now = datetime.datetime.now()
        ctime = now.strftime('%y-%m-%d,%X')
        return render(request, "index.html", {"ctime": ctime})

      如图,index函数就是一个视图函数,他的参数必须有request,必须返回一个HttpResponse对象。视图函数的函数名不需要统一,只需要表达出函数的功能即可。

    2、HttpRequest请求对象

      常用方法:

      request.method:输出请求方式

      request.path:输出路径

      request.POST:POST请求数据

      request.GET:get请求数据

      request.META:请求头

      request.get_full_path()拿路径也取参数

    3、HttpResponse响应对象

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

      HttpResponse()

      render()

      redirect()

      HttpResponse就是在括号里加上需要响应的字符串即可,这里主要说另外两种。

    4、render()

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

      有两种功能:

      1、读取文件字符串

      

    def index(request):
        
        return render(request, 'index.html'

      2、嵌入变量

      views中的代码如同所示:

    def index(request):     
        
        shangping_list = ['苹果', '香蕉', '西瓜']
        name = 'qqq'
        return render(request, 'index.html', {'sp': shangping_list, 'name': name})

      即在后面加上以一个字典

      模版如图所示:

    <body>
        用户:{{ name }}
        <h2>商品信息</h2>
    
    <ul>
    
        {% for foo in sp %}
            <li>{{ foo }}</li>
        {% endfor %}
    
    </ul>
    
    
    </body>

      这样就可以在页面上通过字典中的键将数据传上来。以及循环取出序列中元素的方法。

      页面如下所示:  

    用户:qqq
    商品信息
    苹果
    香蕉
    西瓜

     5、redirect()

      redirect方法是重定向方法,就是当一个网站的路由地址发生变化的时候,或者我们需要跳转到哪个路由地址的时候用到的,用法很简单。

    def login(request):
        if request.method == 'GET':
    
            return render(request, 'login.html')
    
        else:
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
            if user =='qqq' and pwd == '123':
                return redirect('/index/')
            else:
                return HttpResponse('FAIL!')

      如上的login视图函数中,当用户为qqq,密码为123时,跳转到index页面。这就是重定向。

      有人问,我们直接render到index.html页面不一样么?如下图

    def index(request):
      
        shangping_list = ['苹果', '香蕉', '西瓜']
        name = 'qqq'
        return render(request, 'index.html', {'sp': shangping_list, 'name': name})
    
    
    def login(request):
        if request.method == 'GET':
    
            return render(request, 'login.html')
    
        else:
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
            if user =='qqq' and pwd == '123':
                return render(request, 'index.html')else:
                return HttpResponse('FAIL!')

      答案是不一样的,比如index视图函数对页面进行渲染的时候,我们直接render(request, 'index.html')是获取不到渲染的,而且跳转后路由不会发生改变,所以当用户刷新当前页面的时候,会回到之前的登录页面,而不是index页面,很显然是不符合需求的。所以需要重定向来满足我们的需求。

      

  • 相关阅读:
    Visitor Pattern (Visitor设计模式)
    JS DatePicker: jscalendar1.0___v1.51 (JS日期选择器)
    转:Mediator模式
    转: Debug with IIS Express
    101 LINQ Samples
    关于进程与线程:About Processes and Threads
    转:PureMVC示例 CafeTownsend
    Haskell Editor:Leksah & EclipseFP The Haskell plugin for Eclipse
    Haskell、C#、Java、C 程序执行效率比较 :Write your first parallel Haskell program
    SCJP: java exerciese 1
  • 原文地址:https://www.cnblogs.com/490144243msq/p/11570092.html
Copyright © 2011-2022 走看看