Django框架之视图

Django框架之视图层

什么是视图函数

视图函数,属于Django的视图层,默认定义在views.py文件中,是用来处理web请求信息以及返回响应信息的函数。并且这里的视图函数并不仅仅指代函数,也包括类。

请求对象

Django将http协议请求报文中的请求行、首部信息、内容主体封装到了HttpRequest对象中。将HttpRequest对象当做参数传给视图函数中去,在视图函数中,通过访问该对象的属性便可以提取http协议的请求数据

常用属性
  • method

    获取请求方式

  • GET

    获取GET请求携带的数据,将数据封装成QueryDict对象,通过get(key)方法获取指定值,如果该值有多个,使用getlist

  • POST

    获取POST请求携带的数据,将数据封装成QueryDict对象,通过get(key)方法获取指定值,如果该值有多个,使用getlist

  • FILES

    获取表单提交上来的文件

  • path

    获取url地址的路径部分

  • get_full_path()

    获取完整的url地址

  • COOKIES

    获取所有的cookie

  • session

    一个既可读又可写的类似于字典的对象,表示当前的会话

  • is_ajax()

    判断是否是通过ajax发送的请求

响应对象

  • HttpResponse

    向前端页面返回一个字符串

  • render

    render(request, template_name, context)
    参数:
        1、request:必须,用于生成响应的请求对象,固定必须传入的第一个参数
    
        2、template_name:必须,要使用的模板的完整名称,必须传入,render默认会去templates目录下查找模板文件
    
        3、context:可选,可以传入一个字典用来替换模块文件中的变量
    
  • redirect

    返回一个重定向地址,可以使接口也可以是外部url

  • JsonResponse

    返回一个json字符串

    # 方式一:
    import json
    def my_view(request):
        data=['gredae','dijia']
        return HttpResponse(json.dumps(data) )
    # 方式二:
    from django.http import JsonResponse
    def my_view(request):
        data=['gredae','dijia']
        return JsonResponse(data,safe=False)
        #默认safe=True代表只能序列化字典对象,safe=False代表可以序列化字典以外的对象
    

FBV和CBV

之前我们讲过视图函数不仅仅是函数,还可以是类。

基于函数的视图:Function base view

urls.py

from django.urls import url
from app01 import views

urlpatterns = [
    url(r'^login/',views.login), # 必须调用类下的方法as_view
]

views.py

from django.shortcuts import render

def login(request):
    return render(request,'login.html')
基于类的视图:Class base view

urls.py

from django.urls import url
from app01 import views

urlpatterns = [
    url(r'^login/',views.LoginView.as_view()), # 必须调用类下的方法as_view
]

views.py

from django.shortcuts import render
from django.views import View

class LoginView(View):
	# 处理GET请求
    def get(self,request):
        return render(request,'login.html')
	# 处理POST请求
    def post(self,request):
        return render(request,'login.html')
原文地址:https://www.cnblogs.com/Gredae/p/11756195.html