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