CBV和FBV、from表单


Django

JsonResponse类的使用


json格式的数据:进行跨语言数据传输

import json
'''支持的数据类型:str,list, tuple, dict, set'''
# 序列化出来的数据是可以看得懂的,就是一个字符串
dumps
loads

dump
load

import pickle
'''支持的数据类型:python中的所有数据类型'''
# 序列化出来的结果看不懂,因为结果是一个二进制
# pickle序列化出的来的数据只能在python中使用
dumps
loads

dump
load

# js中如何序列化?
JSON.stringify()  # 序列化
JSON.parse()      # 反序列化

**在形参和实参中的用法不一样
from django.http import JsonResponse

def index(request):
    # print(123)
    # return HttpResponse('ok')
    # return redirect()
    # return render()
    user_dict = {'username':'ly很帅', 'password':123}
    l = [1, 2, 3]
    # json_str = json.dumps(l, ensure_ascii=False)

    # return HttpResponse(json_str)
    # return JsonResponse(user_dict, json_dumps_params={'ensure_ascii':False})
    return JsonResponse(l,safe=False)

form表单上传文件

上传文件注意事项:
	1. 必须是post请求
    2. enctype='multipart/form-data'
    
后端:
	在request.FILES中接收文件数据,其他数据一律按照请求方式接收
    
form表单可以传递的数据格式:
	1. urlencoded
    2. form-data
 # 不能提交json格式的数据

'''提交json格式的数据:
	1. ajax
	2. 第三方工具
		postman
		apizza
'''
    
数据格式:
	1. urlencoded
    2. form-data
    3. json格式
    
   if request.method == 'POST':
        print(request.FILES)
        file_obj = request.FILES.get('myfile')
        print(file_obj.name)  # 文件名
        import random
        import uuid
        aa = str(uuid.uuid4()) + '.png'
        with open(aa, 'wb') as f:
            for line in file_obj:
                f.write(line)
    return render(request, 'upload_file.html')

CBV和FBV

FBV: function based view
CBV: class based view
class IndexView(View):
    def get(self, request):
        print('get')
        return HttpResponse('get')
    def post(self, request):
        print('post')
        return HttpResponse('POST')
    
#  url(r'^indexCbv/', views.IndexView.as_view()),

CBV的源码

如何通过请求方式确定的方法?

#############入口################################
            def view(request, *args, **kwargs):
            self = cls(**initkwargs)  # self = IndexView(**initkwargs)
            # self => IndexView
            return self.dispatch(request, *args, **kwargs)
##############核心方法################################
    def dispatch(self, request, *args, **kwargs):
        # GET POST  => get post
        if request.method.lower() in self.http_method_names:
            # 反射:get set has del
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)  # get(request, *args, **kwargs)

模板语法

1. 传值
# 跟变量相关的都使用双括号 {{}}
# 跟逻辑相关的都使用 {%  %}

'''模板文件中取值一律使用点语法 . '''

# 在模板文件里面的函数,不用加括号,会自动加括号调用, 不能传递参数

模板语法之过滤器

# 相当于python里面的内置方法

语法:
	{{变量|过滤器:参数}}
    
过滤器有很多个,大概有六七十,我们需要使用5个左右
1. length
2. defalut
3. date
4. filesizeformat
5. safe

# 过滤器里面最大传两个参数,至少一个参数

文章作者: 祈安
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 祈安 !
评论
  目录