Django基础之视图函数
一.Django的视图函数view
一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。
无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。
二.CBV和FBV
FBV(function base views) 就是在视图里使用函数处理请求。
CBV(class base views) 就是在视图里使用类处理请求。
CBV优点主要下面两种:
-
提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
-
可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
1)**views视图FBV简单版
from django.shortcuts import render,HttpResponse
def login(request): #用户输入ip端口直接进入登录页面
return render(request,'login.html')
def daa(request): #输入完账号密码跳转另一个界面验证登录结果
print(request.POST)
username=request.POST.get('username')
password=request.POST.get('password')
if username=='dabai' and password=='123':
return render(request,'daa.html')
else:
return HttpResponse('404! 账号或密码输入错误')
**views视图CBV版
from django.shortcuts import render,HttpResponse
from django.views import View
class login(View): #在URL处引用Views方法获得 取值方法
def get(self,request):
return render(request, 'login.html')
def post(self,request):
username=request.POST.get('username')
password=request.POST.get('password')
if username=='dabai' and password=='123':
return render(request,'daa.html')
else:
return HttpResponse('404! 账号或密码输入错误')
URL:
登录验证FBC版本
url(r'^$',views.login),
url(r'^daa/',views.daa)
登录验证CBV版本
url(r'^login/',views.login.as_view()), #简单版本,相当于得到了的获取值得方法,然后调用login类中的具体方法
2)添加装饰器
*** 登录加上装饰器FBV版
url(r'^login/',views.login)
***views视图FBV加装饰器版
def wapper(f1): #装饰器部分
def inner(*args,**kwargs):
print('我在前面么')
ret=f1(*args,**kwargs)
print('我再谁后面')
return ret
return inner
三.request(响应)对象
1.相关解释
当一个页面被请求时,Django就会创建一个包含本次请求原信息(请求报文中的请求行、首部信息、内容主体等)的HttpRequest对象。
Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。
Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
2.请求相关的常用值
-
path_info 返回用户访问url,不包括域名
-
method 请求中使用的HTTP方法的字符串表示,全大写表示。
-
GET 包含所有HTTP GET参数的类字典对象
-
POST
-
body 请求体,byte类型 request.POST的数据就是从body里面提取到的
print(request.method) #GET 获得的是请求方法
print(request.path_info) #/index/ 获得的是请求路径
print(request.GET) # 获得的是GET请求方法得到的内容
print(request.POST) # 获得的是POST请求方法得到的内容
print(request.body) #请求体,byte类型,POST获取的数据就是从这里提取的
print(request.get_full_path()) #获取的是除域名之外的所有路径
print(request.META.get('HTTP_USER_HEADER')) #获取的是META请求头 源信息
print(request.META.get('REMOTE_ADDR')) #获取客户端ip地址