• 视图层


    视图层:

    发送数据:

    
    三种后端往前端页面发送数据的方式:
    httpResponse   --> 字符串
    render         --> html数据
    redirect       --> 重定向(网址)
    
    网址 : ip+ port + 参数(正则匹配)
    
    #视图函数必须有一个返回值 并且返回值的数据类型必须是HttpResponse对象
    
    JsonResponse :
       ---前后端数据交互的方式!
    通常情况下前后端数据交互采用的都是json的字符串(字典)
    
    #后端的工作内容:
    	后端只需要写好相应的url接口 前端访问你这个接口;
    只需要返回一个大字典 + 开发文档(用来告诉前端工程师 你这个接口能够返回哪些数据)
    
    python后端与前端序列化的方法:
    
    python后端 	 js前端
    json.dumps    JSON.stringify    序列化
    json.loads    JSON.parse       反序列化
    
    
    

    JsonResponse:

    django内序列化:
    
    def index(request):
    	user_dic = {'name':'sao逼','password':'123'}
    	#存在中文会乱码!!!
    #1.第一种:
    	json_str = json.dumps(user_dic,ensure_ascii=False)
    	#ensure_ascii默认为True,改为False能识别中文
    	return HttpResponse(json_str)
    
    #第二种:
    return JsonResponse(user_dic,json_dumps_params={'ensure_ascii':False})
    
    ## JsonResponse默认是序列化字典用的 如果你想序列化其他数据类型(json模块能够序列化的) 你需要加一个safe参数
    
    #第三种(序列化列表,元组):
    l = [1,2,3,4,5,6,7,]
    return JsonResponse(l,safe=False)
    

    FBV与CBV

    FBV与CBV:
        
    FBV:基于函数的视图
    CBV:基于类的视图
    
    from django.views import View
    from django.shortcuts import render,HttpResponse,redirect
    
    
    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')
    
    # 路由的书写 与CBV有点不同
    # FBV写法     路由(index) >>> 视图函数内存地址
    url(r'^index/',views.index),
    # CBV写法
    url(r'^login/',views.MyLogin.as_view())
    iew
    
    #项目一启动 会自动执行as_view方法
    
    # 1. 函数名 + () : 执行的优先级最高
      2. View类:as_view(cls, **initkwargs)
      3.MyLogin: 手动创建的类
      4.as_view()内闭包-view() --> view
      5.CBV在路由匹配上 其实本质还是FBV
    
    CBV: 在urls内创建的类,必须调用as_view(),
        调用后触发dispath()的执行,确认请求方式 + () ,
        在返回类中自动调用该方法!!!
    

    CBV加装饰器

    给CBV加装饰器 使用内置模块:
        
    from django.utils.decorators import method_decorator
    方法一:
    # @method_decorator(outter,name='post')
    -->指定类内的post函数,添加装饰器
    class MyLogin(View):
    	def post(self,request):
            return
    方法二:
    	# @outter  / 
    	# @method_decorator(outter)
        --->放置在函数前,作为函数的装饰器
        def get(self,request):
            print('我是MyLogin里面的get方法')
            return render(request,'login.html')
    
    

    装饰器实列

    装饰器:
    import time
    from functools import wraps
    
    def outtrt(func):
        @wraps(func)
    	def inner(*args,**kwargs):
            start_time = time.time()
    		res = func(*args,**kwargs)
            end_time = time.time() - start_time
    		print('end_time')
    	return inner
    
  • 相关阅读:
    EasyUI datagrid动态生成列
    EasyUI easyui-combobox实现数据联动
    EasyUI中datagrid的基本用法
    Oracle update 执行更新操作后的数据恢复
    SqlHelper类
    oracle drop table(表)数据恢复方法
    C#微信公众号——本地调试
    git ignore 总结
    maya cmds pymel 选择 uv area(uv 面积) 为0 的面
    maya cmds pymel selectType() 选择类型切换
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11937641.html
Copyright © 2020-2023  润新知