zoukankan      html  css  js  c++  java
  • 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
    在表单中提交文件
    
  • 相关阅读:
    How Default Heap Of Process Grows
    希腊字母表
    Ubuntu第一次亲密接触
    Ubuntu中的挂载点(mount point)
    要一专多能
    First touch with JIT debugging
    小学一下环境变量
    安装VMware Tools
    [转]ReiserFS与ext3的比较
    [bbk4485]第二章Flashback Database 05
  • 原文地址:https://www.cnblogs.com/zhangmingyong/p/11734123.html
Copyright © 2011-2022 走看看