from django.shortcuts import HttpResponse, redirect, render 这个就不解释了
最开始看到的视图 每个视图负责返回一个HttpResponse对象。
from django.shortcuts import HttpResponse, redirect, render
# request ----请求对象
# 解释:当浏览器向服务端请求一个页面时,Django创建一个HttpRequest对象,该对象包含关于请求的元数据。
# 然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。
def testindex(request):
print(request.GET)
print(request.POST)
return HttpResponse("OK")
视图分两种写法
1.函数视图
# 函数视图
from django.shortcuts import HttpResponse, redirect, render
from django.views import View
def testindex(request):
print(request.GET)
print(request.POST)
return HttpResponse("OK")
2.类视图
from django.shortcuts import HttpResponse, redirect, render
from django.views import View
# 需要继承 django.views 下面的 View类
class Index(View):
def get(self, request):
return render(request, 'index.html')
def post(self):
pass
# 解释如果 走的是get请求 就是执行get函数, 发的请求如果是post,就执行post函数
url需要做修改 -------------> url(r'^index', Index.as_view(),name='index'),
给视图加装饰器
def wrapper(func):
def inner(*args, **kwargs):
start_time = time.time()
ret = func(*args, **kwargs)
end_time = time.time()
print("used:", end_time-start_time)
return ret
return inner
# FBV版添加班级
@wrapper
def add_class(request):
if request.method == "POST":
class_name = request.POST.get("class_name")
models.Classes.objects.create(name=class_name)
return redirect("/class_list/")
return render(request, "add_class.html")
类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。
Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。
from django.vies import View
from django.utils.decorators import method_decorator
from django.shortcuts import render, HttpResponse, redirect
def wrapper(func):
def inner(*args, **kwargs):
start_time = time.time()
ret = func(*args, **kwargs)
end_time = time.time()
print("used:", end_time-start_time)
return ret
return inner
class Login(View):
@method_decorator(加功能的函数)
def get(self, request):
return render(request, "login.html")
def post(self, request):
print(request.POST.get("user"))
return HttpResponse("Login.post")
request请求对象的属性
path_info 返回用户访问url,不包括域名
method 请求中使用的HTTP方法的字符串表示,全大写表示。
GET 包含所有HTTP GET参数的类字典对象
POST 包含所有HTTP POST参数的类字典对象
body 请求体,byte类型 request.POST的数据就是从body里面提取到的
注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用
request.POST.getlist("xxxx")