Django中的路径分发和视图函数的两种实现方式FBV、CBV

路径分发

url(r'^app01/',include('app01.urls')),

视图函数

views.py

from django.shortcuts import render,Httpresponse,redirect

请求相关的属性方法:
def index(request): # http相关请求信息-封装-HttpRequest对象
    print(request.META) # 一个字典,里面一堆数据 请求头相关信息
    print(request.method)
    print(request.path) # /index/路径
    print(request.path_info) # 跟上面一样
    print(request.get_full_path()) # /index/?username=dazhuang&password=123
    
    print(request.body) # b'username=dazhuang' 最原始的bytes数据
    print(request.GET) # get 请求提交的数据
    print(request.POST)
    
  
响应相关的方法:
HttpResponse  # ---回复字符串用的方法
render # 回复一个HTML页面使用

redirect # 重定向

def login(request):
    if reuqest.method == 'GET':
    return render(request,'login.html')
  else:
    username = request.POST.get('username')
    password = request.POST.get('password')
    if pass:
      # return render(request,'home.html')
        return redirect('/home/',) # 重定向到另一个页面实现跳转 参数是相对路径
    else:
      return HttpResponse('滚犊子,赶紧去充会员')
   
def home(request):
   return render(request,'home')

重定向的状态码

  • 301 永久
  • 302 临时

CBV --- class base view

  • 类实现

    def warrap(f):
      def inner(*args,**kwargs)
          print('xxxx')
        ret = f(*args,**kwargs)
        return ret
      return inner
    
    
    from django.views import View
    from diango.utils.decorators import method_decorator
    # @method_decorator(n1,name='get') 加装饰器方式三
    class LoginView(View):
    
      @method_decorator(n1)   # 方式2 给所有方法加装饰器
      def dispatch(self,request,*args,**kwargs):
        print('请求来了')
        ret = super().dispatch(request,*args,*kwargs)
          print('到点了,走人了')
        return ret    
    
      #@method_decorator(n1)  # 方式1 给当前方法加装饰器
      def get(self,request):
          return render(request,'login2.html')
    
      def post(self,request):
        uname = request.POST.get('uname')
        pwd = request.POST.get('pwd')
        if ...:
          return HttpResponse('登入成功')
        else:
          return HttpResponse('登入失败')
    
    
    url(r'^login2/',views.LoginView.as_view()),
    
    通过不同的请求方法找到对应的视图类中的方法
    dispatch

FBV —function base view

  • 函数实现

    装饰器
    
    def timmer(f):
        #传实参的时候,相当于 f = index   #自由变量 在另一个内存空间
        def inner(*args,**kwargs):
            start_time = time.time()
            r = f(*args,**kwargs)  #f 就是 index本身 执行了 index()
            end_time = time.time()
            print(f'测试本函数的执行效率{end_time-start_time}')
            return r
        return inner
    
    @timmer  #darty = timmer(dariy)
    def dariy(name,age):
        time.sleep(0.5)
        print(f'{name}的年龄是{age}')
    
    

转载于:https://www.cnblogs.com/he-qing-qing/p/11234581.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值