zoukankan      html  css  js  c++  java
  • 六 .Django 视图Django views.py中的 FBV(函数) CBV(类)(三)

    一 .Django views.py中的 FBV(函数) CBV(类)

    https://www.cnblogs.com/yuanchenqi/articles/8715364.html

    1.FBV

    FBV(function base views) 就是在视图里使用函数处理请求。
    
    fbv就是在url中一个路径对应一个函数

    URLS
    
    urlpatterns = [
          url(r'^$',views.index),
          url(r'^attr',views.attr),
          url(r'^get1/$',views.get1),
          url(r'^get2/$',views.get2),
          url(r'^showreg/$',views.showreg),
          url(r'^showreg/reg/$',views.reg),
          url(r'^showson$',views.showresposon),
          url(r'^cook$',views.cookiessa),
          # 重定向
          url(r'^red1$',views.red1),
          url(r'^red2$',views.red2),
           url(r'^main$',views.main),
           url(r'^04login$',views.login),
           url(r'^showmain$',views.showmain),
           url(r'^quit$',views.quit),
    ]
    
    
    VIEWS
    
    
    from django.shortcuts import render
    # Create your views here.
    from django.http import HttpResponse
    
    def index(request):
        # return HttpResponse("欢迎老到djiango的页面啊哈哈哈哈哈1111111111111111111111111111111")
        return render(request,"html_app/01.html")
    
    def attr(request):
    
         # print(request.path)
         # print(request.method)
         # print(request.encoding)
         # print(request.GET)
         # print(request.POST)
         # print(request.FILES)
         # print(request.COOKIES)
         # print(request.sesson)
         return HttpResponse("打印GET服务器的信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。")
     
    
    # GET
    
    # #01 获取GET传递的数据
    def get1(request):
        # http://127.0.0.1:8000/lover/get1?a=1&b=2&c=3
        # 1 2 3
         a=request.GET.get('a')
         b=request.GET.get('b')
         c=request.GET.get('c')
         return HttpResponse(a+" "+b+" "+c)
    
    #02获取GET传递的数据(键值获取)
    def get2 (request):
        a=request.GET.getlist('a')
        a1=a[0]
        a2=a[1]
        c=request.GET.get('c')
        return HttpResponse(a1+" "+a2+" "+c)
    
    # POST
    
    # 01显示页面
    def showreg(request):
        return render(request,"html_app/02regist.html")
    #02获取表单注册信息  服务器返回数据
    def reg(request):
         name=request.POST.get("aa")
         sex=request.POST.get("sex")
         age=request.POST.get("age")
         hobby=request.POST.get("hobby")
         print(name)
         print(sex)
         print(age)
         print(hobby)
         return HttpResponse("POST")
    
    # resposon对象
    def showresposon(request):
        res=HttpResponse()
        print(res.content)
        print(res.charset)
        print(res.status_code)
        print(res.content-ytpe)
        return res
    
    # cookies  设置
    def cookiessa(request):
        
         res=HttpResponse()
    
         bb=request.COOKIES
    
         res.write("<h1>"+bb["loverTO"]+"<h1>")
         
         # aa=res.set_cookie("loverTO","nice")
         return res
      
    
    # 重定向 方法一
    from django.http import HttpResponseRedirect
    from django.shortcuts import redirect
    def red1(request):
        return HttpResponseRedirect('/lover/red2')
    
    def red2(request):
        return HttpResponse("我是重定向后的视图。。。。。。。。。。。。。")
    
    
    
    """# 重定向 方法二
    from django.shortcuts import redirect
    def red1(request):
        return redirect('/lover/red2')
    def red2(request):
        return HttpResponse("我是重定向后的视图。。。。。。。。。。。。。")"""
    
    # session使用
    def main(request):
         username=request.session.get('name',"默认游客")
         return render(request,"html_app/03main.html",{'username':username})
    
    
    
    def login(request):
        return render(request,"html_app/04login.html")
    def showmain(request):
        username=request.POST.get('username')
        print(username)
        # 存储session
        request.session['name']=username
        request.session.set_expiry(100)   #设置session过期时间    默认是秒
        return redirect('/lover/main')
    
    
    # 删除session
    from django .contrib.auth import logout
    def quit(request):
           logout(request)
           # request.session.clear()
           # request.session.flush()
           return redirect('/lover/main')

     2. CBV

    cbv就是在url中一个路径对应一个类

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^index/', views.IndexView.as_view())     # 执行类后面的as_view()方法,是父类里面的方法
    ]
    
    
    from django.views import View
    
    
    class IndexView(View):
      
        # 以get形式访问会执行get函数,一般情况下获取数据
        def get(self, *args, **kwargs):  
            return HttpResponse('666')
          
        # 以post形式访问的话会执行post函数,一般情况下发送数据
        def post(self, *args, **kwargs):  
            return HttpResponse('999')
    注意:
    
    cbv定义类的时候必须要继承view
    在写url的时候必须要加as_view
    类里面使用form表单提交的话只有get和post方法
    类里面使用ajax发送数据的话支持定义以下很多方法
    restful规范:
    'get'获取数据, 'post'创建新数据, 'put'更新, 'patch'局部更新, 'delete'删除, 'head', 'options', 'trace'
    # views.py
    # CBV
    
    from django.views import View  # 要导入此模块
    class CBV(View):  # 要继承View类
      
      ‘’‘
      def dispatch(self,request,*agrs,**kwargs):  # dispatch作用,获取用户是以get还是post请求,并对应到相应的get或post函数
        print('记录日志')  # 我们自己写一些方法,自定制功能。不论用户用get或post请求,都会执行这里的语句
        result = super(CBV,self).dispatch(request,*agrs,**kwargs)  # 让dispatch执行父类的dispatch方法
           return result                            # 返回父类的dispatch方法
       # 我们可以重写dispatch方法来扩展CBV
       ’‘’
    
       def get(self,request):  # 当以get方式请求时执行此方法
            return HttpResponse('CBV.GET')
        
    def post(self,request):  # 当以post方式请求时执行此方法
            return HttpResponse('CBV.POST')
    
    
    # urls.py
    
    urlpatterns = [
      url(r'^cbv$',view.CBV.as_view()),  # 需要加.as_view()
    ]

     https://www.jianshu.com/p/a3e6217d7bee   详细介绍

  • 相关阅读:
    I
    H
    装箱问题
    E
    Oracle创建视图(View)
    (转)Navicat Premium 12.1.8.0安装与激活
    bigdecimal 保留小数位
    用命令修改Oracle数据库密码
    sql中exists,not exists的用法
    在Orcl中通过SQL语句修改创建表
  • 原文地址:https://www.cnblogs.com/lovershowtime/p/11353499.html
Copyright © 2011-2022 走看看