一:创建项目和应用:

或者用命令创建:

    1:django-admin.py startproject CBV&FBV

    2: cd CBV&FBV (路径切到该文件夹下)

    3: python3 manage.py startapp app01

二:数据库迁移:

三:创建超级用户(做登录验证需要)

四 :分配路由   urls.py

五:登录验证视图函数 views.py----FBV(functiion Base Views)

方法一:

from django.shortcuts import render,HttpResponse,redirect
from django.contrib import auth # Create your views here. def index(request):
user = request.user
if user.is_authenticated:
return render(request,'index.html') return redirect('/login/') def log_in(request): if request.method == "POST":
user = request.POST.get('user')
password = request.POST.get('pwd') user_obj = auth.authenticate(username=user,password=password)
if user_obj: auth.login(request,user_obj)
return redirect('/index/')
return render(request,'login.html')

方法二:

  或者在setting.py中加入:

    LOGIN_URL=('/login/')

from django.shortcuts import render,HttpResponse,redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required # Create your views here. @login_required
def index(request):
return redirect('/login/') def log_in(request): if request.method == "POST":
user = request.POST.get('user')
password = request.POST.get('pwd') user_obj = auth.authenticate(username=user,password=password)
if user_obj: auth.login(request,user_obj)
return redirect('/index/')
return render(request,'login.html')

方法三:利用session

from django.shortcuts import render,HttpResponse,redirect
from django.contrib import auth # Create your views here. def index(request):
if request.session.get('user_info'):
return render(request,'index.html')
return redirect('/login/') def log_in(request):
if request.method == "POST":
user = request.POST.get('user')
password = request.POST.get('pwd')
user_obj = auth.authenticate(username=user,password=password)
# if user == 'root' and password=='root1234': (如果是用自己对数据库表,可以自己做判断。我这是直接用django的user表就直接用auth判断)
if user_obj:
request.session['user_info'] = user
return redirect('/index/')
return render(request,'login.html')

六:登录验证视图函数 views.py----CBV(Class Base Views)

urls.py:

from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index', views.Index.as_view()),
url(r'login',views.Log_in.as_view()),
]

view.py

方法一:

from django.shortcuts import render,HttpResponse,redirect
from django.views import View
from django.contrib import auth class Index(View):
'''先走dispatch再走其它函数'''
def dispatch(self,request,*args,**kwargs):
print('before')
res = super(Index,self).dispatch(request,*args,**kwargs)
print('after')
return res def get(self,request,*args,**kwargs):
return render(request,'index.html') def post(self,request,*args,**kwargs):
return HttpResponse(99999) class Log_in(View):
def get(self,request,*args,**kwargs):
return render(request,'login.html') def post(self,request,*args,**kwargs):
user = request.POST.get('user')
password = request.POST.get('password')
user_obj = auth.authenticate(username=user,password=password)
if user_obj:
request.session['user_info']=user
return redirect('/index/') return render(request, 'index.html')

方法二:单独写个认证类,其余类继承该类

from django.shortcuts import render,HttpResponse,redirect
from django.views import View
from django.contrib import auth class AuthView(object):
def dispatch(self, request, *args, **kwargs):
if not request.session.get('user_info'):
return redirect('/login.html')
res = super(AuthView,self).dispatch(request, *args, **kwargs)
return res class Index(AuthView,View):
'''先走dispatch再走其它函数''' def get(self,request,*args,**kwargs):
return render(request,'index.html') def post(self,request,*args,**kwargs):
return HttpResponse(99999) class Log_in(AuthView,View):
def get(self,request,*args,**kwargs):
return render(request,'login.html') def post(self,request,*args,**kwargs):
user = request.POST.get('user')
password = request.POST.get('password')
user_obj = auth.authenticate(username=user,password=password)
if user_obj:
request.session['user_info']=user
return redirect('/index/')
return render(request, 'index.html')

方法三:装饰器:注意装饰器的写法

from django.shortcuts import render,HttpResponse,redirect
from django.views import View
from django.contrib import auth
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required @method_decorator(login_required)
class Index(View):
'''先走dispatch再走其它函数'''
def get(self,request,*args,**kwargs):
return render(request,'index.html') def post(self,request,*args,**kwargs):
return HttpResponse(99999) class Log_in(View):
def get(self,request,*args,**kwargs):
return render(request,'login.html') def post(self,request,*args,**kwargs):
user = request.POST.get('user')
password = request.POST.get('password')
user_obj = auth.authenticate(username=user,password=password)
if user_obj:
request.session['user_info']=user
return redirect('/index/')
return render(request, 'index.html')

装饰器的用法:

装饰器
get, post方法上
class LoginView(View):
def dispatch(self, request, *args, **kwargs):
return super(LoginView, self).dispatch(request, *args, **kwargs) def get(self, request):
return render(request, 'login.html') @method_decorator(login_required)
def post(self, request):
# request.GET
# request.POST # 请求头中的:content-type
# request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
# 生成随机字符串
# 写浏览器cookie: session_id: 随机字符串
# 写到服务端session:
# {
# "随机字符串": {'user_info':'alex}
# }
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html') dispatch方法上
class LoginView(View):
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(LoginView, self).dispatch(request, *args, **kwargs) def get(self, request):
return render(request, 'login.html') def post(self, request):
# request.GET
# request.POST # 请求头中的:content-type
# request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
# 生成随机字符串
# 写浏览器cookie: session_id: 随机字符串
# 写到服务端session:
# {
# "随机字符串": {'user_info':'alex}
# }
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html') 类上 @method_decorator(login_required, name='get')
class LoginView(View):
def dispatch(self, request, *args, **kwargs):
return super(LoginView, self).dispatch(request, *args, **kwargs) def get(self, request):
return render(request, 'login.html') def post(self, request):
# request.GET
# request.POST # 请求头中的:content-type
# request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
# 生成随机字符串
# 写浏览器cookie: session_id: 随机字符串
# 写到服务端session:
# {
# "随机字符串": {'user_info':'alex}
# }
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html') 特殊:CSRF
Token只能加到dispatch
from django.views.decorators.csrf import csrf_exempt, csrf_protect
class LoginView(View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(LoginView, self).dispatch(request, *args, **kwargs) def get(self, request):
return render(request, 'login.html')
def post(self, request):
# request.GET
# request.POST # 请求头中的:content-type
# request.body
user = request.POST.get('user')
pwd = request.POST.get('pwd')
if user == 'alex' and pwd == "alex3714":
# 生成随机字符串
# 写浏览器cookie: session_id: 随机字符串
# 写到服务端session:
# {
# "随机字符串": {'user_info':'alex}
# }
request.session['user_info'] = "alex"
return redirect('/index.html')
return render(request, 'login.html')

注:

  form表单提交: GET,POST ***
  Ajax提交数据: GET,POST
     ['get'获取, 'post'创建, 'put'更新, 'patch'局部更新, 'delete'删除, 'head', 'options', 'trace'] -> restful规范

Django请求的生命周期:
wsgi -> 中间件 -> 路由系统 -> 视图函数(ORM,Template,渲染)
- wsgiref
- uwsgi

    

Django---view视图FBV&CBV的更多相关文章

  1. Django 路由视图FBV/CBV

    路由层  url路由层结构 from django.conf.urls import url from django.contrib import admin from app01 import vi ...

  2. Django view 视图

    request.method 判断请求方式 8种 GET : 获取一个页面 POST: 提交数据 PUT : 上传 HEAD: 不用上传就获取数据 DELETE: 删除 Request-URL 标识的 ...

  3. Django View视图

    视图view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者 ...

  4. django view 视图控制之数据返回的视图函数

    八.视图 view 概述:views.py定义的python函数,它接受Web请求并且返回Web响应. 有几个页面就有几个视图view user出入url地址,发送request--->urls ...

  5. Django FBV/CBV、中间件、GIT使用

    s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...

  6. django FBV +CBV 视图处理方式总结

    1.FBV(function base views) 在视图里使用函数处理请求. url:        re_path('fbv', views.fbv),        # url(r'^fbv' ...

  7. Django 学习视图之FBV与CBV

    一. CBV与FBV CBV:Class Based View FBV:Function Based View 我们之前写过的都是基于函数的view,就叫FBV.还可以把view写成基于类的,那就是C ...

  8. python 视图 (FBV、CBV ) 、Request 和Response对象 、路由系统

    一.FBV和CBV1.基于函数的view,就叫FBV(Function Based View) 示例: def add_book(request): pub_obj=models.Publisher. ...

  9. Django的View(视图)和路由系统

    一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...

随机推荐

  1. opus 规范 与参数解析

    bytestream_put_buffer(&p, "OpusHead", 8); bytestream_put_byte(&p, 1); /* Version * ...

  2. Tomcat运行流程

    Connector介绍 1.1 Connector的种类 Tomcat源码中与connector相关的类位于org.apache.coyote包中,Connector分为以下几类: Http Conn ...

  3. LeetCode 递归(Recursion) 培训专题 讲解文章翻译 (附链接)

     递归 - 时间复杂度 在本文中, 我们主要介绍如何分析递归算法程序中的时间复杂度.. 在一个递归程序中, 它的时间复杂度 O(T) 一般来说就是他总共递归调用的次数 (定义为 R) 以及每次调用时所 ...

  4. matlab中双站异面直线法定位目标

    calc.m %% 参数信息初始化 [x1,y1,z1]=deal(); [x2,y2,z2]=deal(,,); m1=/; n1=/; p1=^(/)/; m2=; n2=-^(/)/; p2=^ ...

  5. poj 3683(2-sat+输出一组可行解)

    题目链接:http://poj.org/problem?id=3683 思路:对于每个结婚仪式,只有在开始或结束时进行这两种选择,我们可以定义xi为真当且仅当在开始时进行.于是我们可以通过时间先后确定 ...

  6. 七个迹象说明你可能受到APT 攻击

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXF1c2hp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  7. Android-NDK编译:cocos2d-x

    看了下 cocos2d-x 3.0 alpha1 几个关于android的脚本 cocos2d-x\tools\project-creator\create_project.py cocos2d-x\ ...

  8. EF 批量更新删除(linq篇)

    刚开始用EF很多东西都不会用,事后想想都很简单的东西总是用很麻烦的方式实现 1:  EF的联合查询 inner join  很久很久以前我是这么写一个列表展示的,其中有两个字段Contractor和M ...

  9. 【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队

    [BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...

  10. windows下在Eclipse中启动的tomcat没有乱码,单独部署到tomcat下乱码解决方案

    今天遇到了一个很奇怪的问题,在Eclipse中调试,运行项目一切正常,项目的所有编码都是统一的UTF-8.但是在单独部署到tomcat上的时候出现了中文乱码. 解决方案 第一步:确保项目,jsp页面, ...