• 11.14 知识总结(视图层、模层板)


    一、 三板斧的作用

    HttpResponse: 字符串
    render:渲染html页面
    redirect:重定向
    """在视图文件中写视图函数的时候不能没有返回值了,默认返回的是None,页面上就会报错"""

    def render(request, template_name, context=None, content_type=None, status=None, using=None):
        content = loader.render_to_string(template_name, context, request, using=using)
        return HttpResponse(content, content_type, status)

    二、 JsonReponse序列化类的使用

           序列化
    json格式的数据
    {"a":1}
    json有什么用:
        跨语言传输
    序列化:json.dumps
    反序列化:json.loads

    from django.http import JsonResponse
    def index(request):
         user_dict = {'username':'kevin你好'}
        user_dict = [1, 2, 3, 4]
         res=json.dumps(user_dict,ensure_ascii=False)
         return  HttpResponse(res)
         通过看源码学技术
         return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})
        return JsonResponse(user_dict,safe=False)
         return render(request,'index.html')

    三、  form表单上传文件

    表单上传数据需要满足的条件


    1. 请求方式必须是post
    2. enctype="multipart/form-data"

    1. print(request.POST) # 接收的都是普通的数据,非文件数据
    2. # ]}>
    3. print(request.FILES) # 只接受文件数据,普通数据还在request.POST里面
    4. def index(request):
    5. user_dict = {'username':'kevin你好'}
    6. user_dict = [1, 2, 3, 4]
    7. res=json.dumps(user_dict,ensure_ascii=False)
    8. return HttpResponse(res)
    9. 通过看源码学技术
    10. return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False})
    11. return JsonResponse(user_dict,safe=False)
    12. return JsonResponse(user_dict,safe=False)
    13. 'myfile': ['234.png']}>
    14. print(request.POST)
    15. 'myfile': [234.png (image/png)>]}>
    16. file_obj=request.FILES.get('myfile')
    17. file_list = file_obj.name.split('.') # 123.png
    18. import uuid
    19. random_str=str(uuid.uuid4())
    20. file_name = random_str + file_obj.name.split('.')[-1]
    21. with open(file_name, 'wb') as f:
    22. for line in file_obj:
    23. f.write(line)
    24. print(request.body) # 接收纯原生的二进制数据,没有任何的处理 b''----> str---->decode---->dict...
    25. print(request.POST.get('')) # 之所以你能够直接按照字典的方式取值,是因为django给做了封装
    26. print(request.path) # /index/ /index/
    27. print(request.path_info) # /index/ /index/
    28. print(request.get_full_path()) # /index/ /index/?a=1&b=2
    29. print(request.GET.get(''))
    30. return render(request,'index.html')

    四、  CBV的写法与源码分析

             1. 写法 

    1. FBV: function based view # 写的都是函数
    2. CBV: class based view # 写的都是类
    3. from django.views import View
    4. class MyLogin(View):
    5. def get(self, request):
    6. print('get。。。')
    7. return HttpResponse("get")
    8. def post(self, request):
    9. return HttpResponse("hello postman!!!")
    10. url(r'^login/', views.MyLogin.as_view()),

            2. 源码分析

     

    1. # 入口
    2. url(r'^login/', views.MyLogin.as_view()),
    3. # View类中得as_view方法的返回值是view函数名
    4. # 当请求来的时候,会触发view函数的执行
    5. def view(request, *args, **kwargs):
    6. # cls:Mylogin()------>self对象
    7. self = cls(**initkwargs)
    8. return self.dispatch(request, *args, **kwargs) # View类里的dispatch
    9. def dispatch(self, request, *args, **kwargs):
    10. if request.method.lower() in self.http_method_names:
    11. handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
    12. else:
    13. handler = self.http_method_not_allowed
    14. return handler(request, *args, **kwargs)
    15. from django.views import View
    16. class MyLogin(View):
    17. http_method_names = ['get', 'post']
    18. def get(self, request):
    19. print('get。。。')
    20. self.index()
    21. return HttpResponse("get")
    22. def post(self, request):
    23. return HttpResponse("hello postman!!!")
    24. def index(self):
    25. pass
    26. 权限、频率、jwt的源码

    五、  模板层之模板变量

    在html页面中写一个python的代码
    PHP:不是后端语言,前端 操作数据量,写逻辑,都可以
    python也有点像

    {{ 写变量 }}
    {% 写逻辑 %}

    {{ d.0 }}
    {{ d.1 }}
    {{ d.3 }}
    {{ user_dict.hobby.2 }}
    {{ index }}
    {{ obj.score }}

  • 相关阅读:
    C++树详解
    【微信小程序 | 实战开发】ES5、ES6概述和新特性介绍
    自学unity,该不该阻止?
    git下载其他项目到本地
    Linux:syslog()系统调用
    Leetcode刷题详解——寻找旋转排序数组中的最小值
    数组的左旋和右旋算法
    sketch设计不得不知道的五个高级功能
    混凝土板材及砌块生产线数字孪生可视化管理系统,实现智慧工厂车间智能化数字化管理
    AnyCast技术
  • 原文地址:https://blog.csdn.net/weixin_66010453/article/details/134401147