Django之请求生命周期及FBV/CBV模式
admin
2023-07-14 12:23:29
0

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

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

上一篇:python反射

下一篇:Cookie和Session

相关内容

热门资讯

特朗普:正致力于与伊朗达成协议... 特朗普在《纽约邮报》一档播客访谈节目中称,他正与伊朗磋商一项协议,伊朗已同意不再谋求拥有核武器。他表...
不接壤的日菲为何偷划海界? 日菲近日发表联合声明,宣称就“划定两国专属经济区和大陆架的海洋边界”启动正式谈判。两个隔海相望的国家...
凤凰晚报丨从钳工到老戏骨,魏宗... 今日人物【从钳工到老戏骨,魏宗万用一生诠释“戏比天大”】6月1日,表演艺术家魏宗万在上海逝世,享年8...
科威特称伊朗袭击致63人受伤 科威特卫生部门3日称,伊朗当天对科威特的袭击已造成63人受伤,相关部门已启动紧急应对预案,并在全国范...
日本标榜“和平国家”却行扩军备... 今年是东京审判开庭80周年,世界正回望历史、反思战争罪责、捍卫二战后来之不易的国际秩序之际,日本却迈...
浙江杨梅即将大规模上市,如何破... “我们现在的压力很大。”5月底,浙江余姚杨梅产区丈亭镇副镇长林宇站在一片杨梅林前对第一财经表示,当地...
致5死2伤!韩国就韩华航空航天... 【环球网报道 记者 姜蔼玲】据韩联社6月1日报道,针对位于韩国大田的韩华航空航天公司发生爆炸致7人伤...
黄河科技学院2026年招生简章 长按图片识别二维码或点击 “阅读原文” 查看电子招生简章。
医路起航,从“心” 开始!黄河... 6月1日上午,黄河科技学院附属医院2022级临床医学本科实习生入院岗前培训在大医讲堂顺利举办。院领导...
问题居然在实体卡槽上!美版iP... 6月2日消息,日前,又有博主提前把还没发布的iPhone 18 Pro电池参数给曝光了出来,根据爆料...