Django之请求生命周期及FBV/CBV模式-创新互联

一.Http请求的过程
1.http的请求/响应模式,先是用户通过前端页面发送一个http请求,请求内容包括三部分:请求头/空行/请求体(get方法没有请求体)
例如:
Django之请求生命周期及FBV/CBV模式
抓包如下:
Django之请求生命周期及FBV/CBV模式
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.前端收到响应,响应的字符串内容也是包含三部分:响应头/空行/响应体。之后浏览器再去渲染返回的响应体展示给用户看。
Django之请求生命周期及FBV/CBV模式

巫山网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。成都创新互联成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联

二.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模式

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

名称栏目:Django之请求生命周期及FBV/CBV模式-创新互联
网页路径:https://www.cdcxhl.com/article12/deegdc.html

成都网站建设公司_创新互联,为您提供搜索引擎优化外贸网站建设企业网站制作自适应网站品牌网站建设网站营销

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

微信小程序开发