路径分发
url(r'^app01/',include('app01.urls')),
视图函数
views.py
from django.shortcuts import render,Httpresponse,redirect
请求相关的属性方法:
def index(request): # http相关请求信息-封装-HttpRequest对象
print(request.META) # 一个字典,里面一堆数据 请求头相关信息
print(request.method)
print(request.path) # /index/路径
print(request.path_info) # 跟上面一样
print(request.get_full_path()) # /index/?username=dazhuang&password=123
print(request.body) # b'username=dazhuang' 最原始的bytes数据
print(request.GET) # get 请求提交的数据
print(request.POST)
响应相关的方法:
HttpResponse # ---回复字符串用的方法
render # 回复一个HTML页面使用
redirect # 重定向
def login(request):
if reuqest.method == 'GET':
return render(request,'login.html')
else:
username = request.POST.get('username')
password = request.POST.get('password')
if pass:
# return render(request,'home.html')
return redirect('/home/',) # 重定向到另一个页面实现跳转 参数是相对路径
else:
return HttpResponse('滚犊子,赶紧去充会员')
def home(request):
return render(request,'home')
重定向的状态码
- 301 永久
- 302 临时
CBV --- class base view
类实现
def warrap(f): def inner(*args,**kwargs) print('xxxx') ret = f(*args,**kwargs) return ret return inner from django.views import View from diango.utils.decorators import method_decorator # @method_decorator(n1,name='get') 加装饰器方式三 class LoginView(View): @method_decorator(n1) # 方式2 给所有方法加装饰器 def dispatch(self,request,*args,**kwargs): print('请求来了') ret = super().dispatch(request,*args,*kwargs) print('到点了,走人了') return ret #@method_decorator(n1) # 方式1 给当前方法加装饰器 def get(self,request): return render(request,'login2.html') def post(self,request): uname = request.POST.get('uname') pwd = request.POST.get('pwd') if ...: return HttpResponse('登入成功') else: return HttpResponse('登入失败') url(r'^login2/',views.LoginView.as_view()), 通过不同的请求方法找到对应的视图类中的方法 dispatch
FBV —function base view
函数实现
装饰器 def timmer(f): #传实参的时候,相当于 f = index #自由变量 在另一个内存空间 def inner(*args,**kwargs): start_time = time.time() r = f(*args,**kwargs) #f 就是 index本身 执行了 index() end_time = time.time() print(f'测试本函数的执行效率{end_time-start_time}') return r return inner @timmer #darty = timmer(dariy) def dariy(name,age): time.sleep(0.5) print(f'{name}的年龄是{age}')