六 .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   详细介绍

 

posted @ 2019-08-14 01:55  supreme999  阅读(258)  评论(0编辑  收藏  举报