Django之请求生命周期及FBV/CBV模式
一.Http请求的过程
1.http的请求/响应模式,先是用户通过前端页面发送一个http请求,请求内容包括三部分:请求头/空行/请求体(get方法没有请求体)
例如:
抓包如下:
2.服务端就收到http的请求内容的字符串后,进行解析出相应的请求头(method /url/cookie等信息 )和请求体内容,并将请求体的内容转换成对应的key-value格式。
3.服务端再通过url去匹配对应的URL路由(匹配规则是从上向下进行正则匹配,若匹配成功则停止不再向下匹配),匹配成功后找到views中对应的函数或类,执行对应函数或类中的业务代码,处理成功后则进行响应的返回;
4.返回的形式有三种:render(request,’*.html’,locals())/HttpResponse(‘字符’)/redirect(‘/url/’)
注意:HttpResponse()是直接返回字符串给前端浏览器进行显示;render()分为三步:a.返回字符串;b.替换(渲染)变量;c.返回给浏览器;redirect()是先去匹配需要跳转的url,再去匹配跳转的url再去重复render()的过程;
5.前端收到响应,响应的字符串内容也是包含三部分:响应头/空行/响应体。之后浏览器再去渲染返回的响应体展示给用户看。
公司主营业务:做网站、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出工布江达免费做网站回馈大家。
二.FBV及CBV模式
FBV:function-views模式,也是常用的url对应views.py中对应的函数;
CBV:class-views模式,是不常用的url对应views.py中对应的类的模式;
FBV模式:
urlpatterns = [
# path('admin/', admin.site.urls),
# url(r'^login/',views.login,name = 'login'),
url(r'^mainmenu/',views.mainmenu,name = 'mainmenu'),#FBV模式
url(r'^login/',views.CLOGIN.as_view(),name = 'mainmenu'),#CBV模式
]
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
from django.shortcuts import render,redirect
# Create your views here.
from django.views import View
def login(request):
if request.method == 'POST':
if request.POST.get('username') == 'admin' and request.POST.get('pwd') == 'admin':
#session的使用
request.session['username'] = request.POST.get('username')
request.session['pwd'] = request.POST.get('pwd')
return redirect('/mainmenu/')
#cookie的单独使用
# ret = redirect('/mainmenu/')
# ret.set_cookie('username',request.POST.get('username'))
# return ret
else:
return render(request, 'login.html')
else:
return render(request, 'login.html')
CBV模式:
urlpatterns = [
# path('admin/', admin.site.urls),
# url(r'^login/',views.login,name = 'login'),
url(r'^mainmenu/',views.mainmenu,name = 'mainmenu'),#FBV模式
url(r'^login/',views.CLOGIN.as_view(),name = 'mainmenu'),#CBV模式
]
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
from django.shortcuts import render,redirect
# Create your views here.
from django.views import View
class CLOGIN(View):
# 这个函数(了解作用即可,可不写)作用类似于装饰器,参数*args, **kwargs代表可传进去多个参数
def dispatch(self, request, *args, **kwargs):
# 重写dispatch方法,相当于执行get/post方法(关键看传来的是那种请求方式,如果是get请求方式,就执行get方法)
result = super(CLOGIN,self).dispatch(request, *args, **kwargs)
return result
# 函数名只能是get,一旦有get请求发来,就执行此函数
def get(self,request):
return render(request, 'login.html')
# 函数名只能是post,一旦有post请求发来,就执行此函数
def post(self,request):
if request.POST.get('username') == 'admin' and request.POST.get('pwd') == 'admin':
# session的使用
request.session['username'] = request.POST.get('username')
request.session['pwd'] = request.POST.get('pwd')
return redirect('/mainmenu/')
else:
return render(request, 'login.html')
POST/GET请求方式不同:
浏览器默认的方式是get形式,也是说只要不规定post请求,浏览器都是以get方式请求。post请求只有通过form表单和ajax实现。
三.欢迎关注笔者公众号
当前题目:Django之请求生命周期及FBV/CBV模式
浏览地址:http://scyanting.com/article/jpcheo.html