zoukankan      html  css  js  c++  java
  • Django视图层

    本文目录:

    一、视图函数

    二、request对象

    三、HttpResponse对象 

    四、JsonResponse

    五、CBV和FBV

    六、文件上传

    七、.前端提交数据编码格式

    一、视图函数

    一个视图函数,简称视图,是一个简单的视图函数,它接受web请求并且返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或一张图片,是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在python目录下面。除此之外没有更多的要求了--可以说没有什么神奇的地方了,为了将代码放在某处,约定下面是一个返回当前时间作为HTNL文档的视图:

    from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
    import datetime
    
    def current_datetime(request):
        now = datetime.datetime.now()
        html = "<html><body>It is now %s.</body></html>" % now
        return HttpResponse(html)

    让我们阅读上面的代码:

    * 首先,我们从django.shortcutsmokuai导入了HttpResponse类,以及Python的datetime库

    *接着,我们定义了current——datetime函数。他就是视图函数。每个视图函数都是用了HttpRequest对象作为一个参数,并且称之为request。

    注意视图函数的名称并不重要:不需要一个统一的的命名方式命名,以便让Django识别它,我们将其命名为current_datetime,是因为这个名称能够精确的反映出它的功能。

    *这个视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象。

     

    二、request对象

      method:请求方式

      GET:get请求的参数(post请求,也可以携带参数)

      POST:post请求的参数(本质上是从body中取出来,放到里面了)

      META:字典(放好多东西,前端传过来的,一定从其中拿出来)

      body:post提交的数据

      path:请求的路径,不带参数

      request.get_full_path(): 请求路径,戴参数

      encoding:编码方式

    三、HttpResponse对象

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

      * HttpResponse()

      *render()

      *readirect()

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

      render()

      render(request,template_name[,context])

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

      参数:request:用于生成响应的请求对象

         template_name:要使用的模板的完整名称,可选的参数

           context:添加到模板上下文的一个字典。默认一个空字典,如果字典中的某个值是可调用的,视图将返回一个模板页面中模板语法进行渲染,最终渲染成一个                                           html页面作为响应体。  

      redirect()

      传递要重定向的一个硬编码的URL  

    def my_view(request):
        ...
        return redirect('/some/url/')

      也可以是一个完整的URL

    def my_view(request):
        ...
        return redirect('http://www.baidu.com/')

     

    四、JsonResponse

    向前端会返回一个json格式字符串的两种方式

      # 第一种方式
        # import json
        # data={'name':'lqz','age':18}
        # data1=['lqz','egon']
        # return HttpResponse(json.dumps(data1))
        # 第二种方式
        from django.http import JsonResponse
        # data = {'name': 'lqz', 'age': 18}
        data1 = ['lqz', 'egon']
        # return JsonResponse(data)
        return JsonResponse(data1,safe=False)

      

    五、CBV 和 FBV

    CBV基于类的视图(class base view)和FBV基于函数的视图(Function base view)

    cbv:一个路由写一个类

    先定义一个类:继承至View

    from django.views import View
    class MyClass(View):
        # 当前端发get请求,会响应到这个函数
        def get(self, request):
            return render(request,'index.html')
        # 当前端发post请求,会响应到这个函数
        def post(self,request):
            print(request.POST.get('name'))
            return HttpResponse('cbv--post')
    #当前端发post请求,会响应到这个函数
      re_path('^myclass/$',views.MyClass.as_view()),

    六、文件上传

    form表单默认提交的编码方式是enctype=“appliction/x-www-form-urlencoded”

    前端:如果要form表单上传文件,必须指定编码方式为:multipart/form-data

    后端:

      file=request.FILES.get("myfile")

      with open (file,name,'wb') as f:

        for line in file:

          f.write(line)

    七、前端提交数据编码格式:

      multipart/from-data(上传文件)

      application/x-www-form-urlencoded(默认编码)

      

  • 相关阅读:
    Java序列化原理
    分库分表
    数据库索引
    监听TCP端口号:从简单Socket到NIO到Netty
    如何保证缓存与数据库的双写一致性
    代理模式:静态代理、JDK动态代理、Cglib动态代理
    Redis发布订阅(Pub-Sub)模式
    Redis分片机制(Sharding)
    Redis高可用性:主从、哨兵和集群
    Redis简介
  • 原文地址:https://www.cnblogs.com/wuzhengzheng/p/10245798.html
Copyright © 2011-2022 走看看