在视图文件中写视图函数的时候不能没有返回值了,默认返回的是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)
序列化
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表单上传数据以及后端如何获取
print(request.POST) # 接收的都是普通的数据,非文件数据
]}>
print(request.FILES) # 只接受文件数据,普通数据还在request.POST里面
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 JsonResponse(user_dict,safe=False)
print(request.POST)
]}>
file_obj=request.FILES.get('myfile')
file_list = file_obj.name.split('.') # 123.png
import uuid
random_str=str(uuid.uuid4())
file_name = random_str + file_obj.name.split('.')[-1]
with open(file_name, 'wb') as f:
for line in file_obj:
f.write(line)
print(request.body) # 接收纯原生的二进制数据,没有任何的处理 b''----> str---->decode---->dict...
print(request.POST.get('')) # 之所以你能够直接按照字典的方式取值,是因为django给做了封装
print(request.path) # /index/ /index/
print(request.path_info) # /index/ /index/
print(request.get_full_path()) # /index/ /index/?a=1&b=2
print(request.GET.get(''))
return render(request,'index.html')
request.method
:该方法返回客户端用于发起请求的HTTP方法。例如,可以是'GET'、'POST'、'PUT'、'DELETE'等。您可以使用该方法来确定请求的类型,并相应地执行特定操作。request.POST
:该属性是一个类似字典的对象,包含了请求中通过POST方法发送的所有参数。这些参数通常是通过HTML表单发送的。您可以使用参数的名字作为键来访问单个参数,例如request.POST['username']
。request.GET
:类似于request.POST
,该属性包含了请求中通过GET方法发送的所有参数。这些参数通常会附加在URL之后,以问号分隔。您可以使用参数的名字作为键来访问单个参数,例如request.GET['page']
。request.FILES
:该属性是一个类似字典的对象,包含了请求中通过文件上传组件发送的所有文件。当表单中包含文件上传字段时,通过request.FILES
可以访问上传的文件。您可以使用文件的名字作为键来访问单个文件,例如request.FILES['file']
。只能获取到路由地址,无法获取到参数
request.path
:该属性表示请求URL中的路径部分。它包含在域名之后,在任何查询参数之前。例如,如果请求的URL是"http://example.com/foo/bar/",那么request.path
将为"/foo/bar/"。只能获取到路由地址,无法获取到参数
request.path
相比,request.path_info
更加原始和未经解析。它保留了URL路径中的任何编码、特殊字符或斜杠等信息。request.path_info
的值将是 "/foo/bar/"。request.path
来获取丢弃域名后的路径,而使用 request.path_info
来获取原始的、未解析的路径。这在某些情况下非常有用,例如当您需要对URL进行一些自定义操作或路由处理时。即能获取到路由地址又能获取到完整的路由地址后面的参数
视图函数既可以是函数也可以是类
def index(request):
return HttpResponse('index')
from django.views import View
class MyLogin(View):
def get(self, request):
print('get。。。')
return HttpResponse("get")
def post(self, request):
return HttpResponse("hello postman!!!")
url(r'^login/', views.MyLogin.as_view()),
# 入口
url(r'^login/', views.MyLogin.as_view()),
# View类中得as_view方法的返回值是view函数名
# 当请求来的时候,会触发view函数的执行
def view(request, *args, **kwargs):
# cls:Mylogin()------>self对象
self = cls(**initkwargs)
return self.dispatch(request, *args, **kwargs) # View类里的dispatch
def dispatch(self, request, *args, **kwargs):
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)
from django.views import View
class MyLogin(View):
http_method_names = ['get', 'post']
def get(self, request):
print('get。。。')
self.index()
return HttpResponse("get")
def post(self, request):
return HttpResponse("hello postman!!!")
def index(self):
pass
权限、频率、jwt的源码
MBV和CBV各有各的特点,都有应用
- CBV特点
- 能够直接根据请求方式的不同直接匹配到对应的方法执行