Django视图层
视图层(views)
主要用来写业务逻辑
三板斧的使用
HttpResponse:返回一个字符串
render:渲染模板(html)
参数:request,模板.html,locals()
redirect:重定向的
重定向:会有两次请求,第一返回一个响应头localtion:/index/
(/index/ 是redirect里面写的相对路径) code:301 浏览器读取到301或者302,就会发起新的请求,第二次返回一个index.html
第一次发送的是一个指令,第二次请求某个地址
##一个请求就是一个request对象
JsonResponse序列化类的使用
源码
这个类背后还是调用了json模块的dumps
json有什么用?
跨语言传输
在Django中,我们使用JsonResponse()
如果需要传输中文,加上参数json_dumps_params={'ensure_ascii':False}
如果想把别的数据类型返回给页面,加上safe=False参数,可以返回其他数据类型,比如:list,int
def index(request):
# userinfo = {'username': 'tank你好', 'password': '123'}
user_list=[1,2,3,45]
user_int=1
user_float=1.1
user_tuple=(1,)
return JsonResponse([user_list,user_int,user_float,user_tuple], safe=False)
form 表单上传文件
需要满足条件:
1.请求方式必须是post
2.envtype="multipart/form-data"
file.html
<form action="" method="post" enctype="multipart/form-data" >
<input type="file" name="img/png"><br>
<input type="submit" value="提交">
def index(request):
res = request.FILES.get('img/png')
if res is not None:
random_str = str(uuid.uuid4())+('.')
file_name = random_str+res.name.split(".")[-1]
print(file_name)
with open(file_name,'wb') as f:
for i in res:
f.write(i)
print(request.body)
print(request.path)
print(request.path_info)
print(request.get_full_path())
return render(request, 'file.html')
FILES:接收文件对象
body:接收二进制
path:接收第一个路径
path_info:接收一个路径
get_full_path():如果通过get传参,那么可以直接获取get传参的路径包括参数
CBV(class base view)的写法
使用类的方式定义method
class Person(View):
def get(self, request):
print('get..')
return HttpResponse('get')
def post(self, request):
print('post..')
return HttpResponse('index.html')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)