类视图

发布时间 2023-07-27 17:46:03作者: MyKai

views

views较多时:创建views文件夹 apps.name.view.filename

导入

  • 能用绝对导入就用绝对导入

  • 不在根目录下使用相对导入

request参数

常见参数
参数 内容
path_info 当前url
method 请求方式
headers 请求头

获取cookice

requests.CookIES["name"]

获取参数

get
request.GET.get("xxx")
post
request.POST.get("xxx")
file文件:
request.FILES.get("n2")

request参数源码:@property

​ a.file() 可以有 a.file, 一样返回

返回数据

from django.shortcuts import render,HttpResponse,redirect
from django.http import JsonResponse
  • HttpResponse 返回文本,字节,字符串(图片验证码)
  • redirect 重定向(值可以是url|urls里的name)
  • JsonResponse 返回json数据

相当于 HttpResponse (json.dumps())

  • render渲染

    render(request,"xxx.html")
    

    在项目根目录下创建templates目录 再setting文件夹下注册TEMPLATE 参数

    'DIRS':[]

    根目录下没有,按照顺序在注册了的app下的templates目录下找

响应体

res=HttpResponse("name")

res["xx"]="xxx"

响应体增加Headers里增加 xx:xxx

CBV和FBV

CBV

from django.views import View
class xxView(View):
    def get(self,request):
        xxx
    def post(self,request):
        xxx


静态资源:

静态文件:开发需要的静态文件;/static/(根目录下)

setting.py


STATIC_URL = '/static/'
STATICFILES_DIRS=(
    os.path.join(BASE_DIR,"static")
)

没有的话在注册的app下的static下找

目录建议:static/app_name
统一路径
# 寻找setting 下的static路径,创建static变量
{% load static %}
 使用static变量 
{% static "api/1.png"}

媒体文件:用户上传的文件; /media/(根目录下)

在url里增加media的访问

from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
	
]+static(settings.MeDIA_URL,document_root=settings.MEDIA_ROOT)

类视图(CBV)

from django.views.generic import View

class RegisterView(View):
    """类视图:处理注册"""

    def get(self, request):
        """处理GET请求,返回注册页面"""
        return render(request, 'register.html')
		# 处理字符串乱码的问题
        # 中文乱码
        return JsonResponse(book_list,safe=False,json_dumps_params={"ensure_ascii":False})
    def post(self, request):
        """处理POST请求,实现注册逻辑"""
        return HttpResponse('这里实现注册逻辑')

配置路由时,使用类视图的as_view()方法来添加

urlpatterns = [
    # 视图函数:注册
    # url(r'^register/$', views.register, name='register'),
    # 类视图:注册
    url(r'^register/$', views.RegisterView.as_view(), name='register'),
]

原生序列化

from django.core.serializers import serialize
class CourseView(APIView):
    def get(self, request):
        # 2.获取queryset    
        course_obj = models.Course.objects.all()
        # 3.序列化
        serialized_data = serialize("json", course_obj)
        print(serialized_data)
        # 4.将序列化之后的数据返回
        return HttpResponse(serialized_data)