Django视图层

1、视图函数html

2、request对象前端

3、HttpResponse对象 python

4、JsonResponseweb

5、CBV和FBVdjango

6、文件上传json

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

 

1.视图函数app

一个视图函数,简称视图,是一个简单的视图函数,它接受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)

让咱们阅读上面的代码:post

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

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

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

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

 

2.request对象

  method:请求方式

  GET:get请求的参数(post请求,也能够携带参数)

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

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

  body:post提交的数据

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

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

  encoding:编码方式

3.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/')

 

4.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)

  

5.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()),

6.文件上传

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)

7.前端提交数据编码格式:

  multipart/from-data(上传文件)

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

相关文章
相关标签/搜索