zoukankan      html  css  js  c++  java
  • 四、视图层

    一、HttpResponse

    1. 视图函数必须有一个返回值,且返回值数据类型必须是HttpResponse对象
    
    2. 三个HttpResponse对象
    
    	a. HttpResponse
    	b. render
    	c. redirect
    

    二、JsonResponse

    1. 通常前后端数据交互采用json格式字符串(字典)
    
    
    2. JsonResponse向前端传输字典
    
    	from django.http import JsonResponse
    	
    	
    	def index(request):
    	
    	    user_dict = {'name': 'byx', 'msg': '想放假'}
    	
    	    return JsonResponse(user_dict, json_dumps_params={'ensure_ascii': False})
    
    
    3. JsonResponse向前端传输其他数据类型
    
    	from django.http import JsonResponse
    	
    	
    	def index(request):
    	
    	    l = [1, 2, 3]
    	
    	    return JsonResponse(l, safe=False)
    

    三、FBV与CBV

    1. 定义
    
    	FBV:基于函数的视图
    	CBV:基于类的视图
    	
    2. CBV基本写法
    
    	a. 视图层
    	
    		from django.shortcuts import render, HttpResponse, redirect
    		from django.views import View
    		
    		
    		class Mylogin(View):
    		
    		    def get(self, request):
    		        print('我是MyLogin里面的get方法')
    		        return render(request, 'login.html')
    		
    		    def post(self, request):
    		        print('我是MyLogin里面的post方法')
    		        return HttpResponse('post')
    	
    	b. 路由层
    
    		urlpatterns = [
    		    url(r'^admin/', admin.site.urls),
    		    # FBV路由写法
    		    url(r'^index/', views.index),
    		    # CBV路由写法
    		    url(r'^login/', views.Mylogin.as_view()),
    		]
    
    3. CBV特点及源码内部原理
    
    	a. 特点
    		
    		自动根据不同请求方式执行不同方法
    	
    	b. 源码内部原理
    	
    		根据接收的request参数,用反射获取到对应的方法。
    	
    		# 如果想在视图函数执行之前做一些操作,可以在CBV中定义dispatch方法来拦截
    		def dispatch(self, request, *args, **kwargs):
    		
    		    if request.method.lower() in self.http_method_names:
    		        handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
    		
    		    else:
    		        handler = self.http_method_not_allowed
    		
    		    return handler(request, *args, **kwargs)
    		
    
    4. CBV加装饰器方法(装饰器‘outter’)
    
    	a. 直接写在函数上方
    	
    		from django.views import View
    		from django.utils.decorators import method_decorator
    		
    		
    		class Mylogin(View):
    		                                
    			@method_decorator(outter)
    			def get(self, request):
    				print('我是MyLogin里面的get方法')
    				return render(request, 'login.html')
    		                        
    			def post(self, request):
    				print('我是MyLogin里面的post方法')
    				return HttpResponse('post')
    		
    	
    	b. 写在类上方指定给某个方法装
    	
    		from django.views import View
    		from django.utils.decorators import method_decorator
    		
    		
    		@method_decorator(outter, name='post')
    		class Mylogin(View):
    		                                 
    		        def get(self, request):
    		                print('我是MyLogin里面的get方法')
    		                return render(request, 'login.html')
    		                        
    		        def post(self, request):
    		                print('我是MyLogin里面的post方法')
    		                return HttpResponse('post')
    		
    	c. 给dispatch方法装
    	
    		from django.views import View
    		from django.utils.decorators import method_decorator
    		
    		
    		@method_decorator(outter, name='dispatch')
    		class Mylogin(View):
    		        
    		        def dispatch(self, request, *args, **kwargs):
    		                return super().dispatch(request, *args, **kwargs)
    		        
    		        def get(self, request):
    		                print('我是MyLogin里面的get方法')
    		                return render(request, 'login.html')
    		                        
    		        def post(self, request):
    		                print('我是MyLogin里面的post方法')
    		                return HttpResponse('post')
  • 相关阅读:
    C++对象模型与内存位对齐的简单分析(GNU GCC&VS2015编译器)
    [GeekBand] C++学习笔记(2)——BigThree、OOP
    [GeekBand] C++ 高级编程技术 (1)
    [GeekBand]C++高级编程技术(2)
    C++中引用的本质分析
    函数的重载(1)
    C++的特点
    布尔类型和三目运算符
    Linux客户端下的latex相关操作
    无光驱上网本上安装win7
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/12052199.html
Copyright © 2011-2022 走看看