• Django之视图层


    Django之视图层

    小白必会三板斧

    HttpResponse

    render

    render推导式
    from django.template import Template,Context
    temp = Template("<h1> {{ user }} </h1>")
    con = Context({"user":[1,2,3,4]})
    res = temp.render(con)
    return HttpResponse(res)
    

    redict

    JsonResponse

    向前端返回一个json格式字符串的两种方式

    方式一:

    import json
    def my_view(request):
        data=['egon','kevin']
        return HttpRespnse(json.dumps(data))
    

    方式二:

    from django.http import JsonResponse
    
    def my_view(request):
        data=['egon','kevin']
        return JsonResponse(data,safe=False)
     #默认safe=True代表只能序列化字典对象,safe=False代表可以序列化字典以外的对象
    

    form表单上传文件

    1.提交方式必须是post
    2.需要将form标签的enctype属性由默认的urlencoded改为formdata

    后端需要从request.FILES中获取上传的文件

    django内部针对不同数据格式的数据 会解析到不同的方法中
    request.GET
    request.POST
    request.FILES

    FBV与CBV

    django的视图层由两种形式结构:FBV和CBV

    1、FBV基于函数的视图(function base view),我们之前一直介绍的都是FBV

    2、CBV基于类的视图(class base view)

    案例:

    urls.py

    from django.urls import path,register_converter,re_path
    from app01 import views
    
    urlpatterns=[
        re_path(r'login/',views.LoginView.as_view()),
        #必须调用类下的方法as_view
    ]
    

    views.py

    from django.shortcuts import render,HttpResponse,redirect
    from django.views import View
    
    class LoginView(View):
        def dispatch(self, request, *args, **kwargs): # 可在该方法内做一些预处理操作
            # 当请求url为:http://127.0.0.1:8008/login/会先触发dispatch的执行
            # 如果http协议的请求方法为GET,则调用下述get方法
            # 如果http协议的请求方法为POST,则调用下述post方法
            obj=super().dispatch(request, *args, **kwargs) # 必须继承父类的dispatch功能
            return obj # 必须返回obj
    
        def get(self,request):
            return render(request,'login.html')
    
        def post(self,request):
            name=request.POST.get('name')
            pwd=request.POST.get('pwd')
            if name  == 'egon' and pwd == '123':
                res='登录成功'
            else:
                res='用户名或密码错误'
            return HttpResponse(res)
    

    测试:

    python manage.py runserver
    在表单中提交文件
    
  • 相关阅读:
    关于ADMM的研究(一)
    BAT染指影视制作 欲全面撬开互联网粉丝经济
    把安卓源代码中的system app独立出来,像开发普通app那样开发
    Java数学表示式解析工具- jeval
    android monkey
    tomcat URL简写案例:模拟站点www.baidu.com的訪问
    Ajax 跨域请求 jsonp获取json数据
    Android 开源项目android-open-project解析之(三) ScrollView,TimeView,TipView,FlipView
    iOS-获取UIView的全部层级结构
    定制属于自己的Chrome起始页
  • 原文地址:https://www.cnblogs.com/zhangmingyong/p/11734123.html
Copyright © 2020-2023  润新知