当前位置: 首页 > news >正文

Django学习日志05

视图层

三板斧的使用

HttpResponse: 字符串
render:渲染html页面
redirect:重定向的

"""在视图文件中写视图函数的时候不能没有返回值了,默认返回的是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)

JsonResponse序列化类的使用

序列化
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表单上传文件

表单上传数据需要满足的条件
<form action="" method="post">
1. 请求方式必须是post
2. enctype="multipart/form-data"

print(request.POST) # 接收的都是普通的数据,非文件数据# <MultiValueDict: {'myfile': [<InMemoryUploadedFile: 234.png (image/png)>]}>
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)# <QueryDict: {'myfile': ['234.png']}># <QueryDict: {}>print(request.POST)# <MultiValueDict: {'myfile': [<InMemoryUploadedFile: 234.png (image/png)>]}>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=2print(request.GET.get(''))return render(request,'index.html')

CBV的写法

FBV: function based view # 写的都是函数
CBV: class based view # 写的都是类
from django.views import Viewclass 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()),

CBV的源码分析

# 入口
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类里的dispatchdef 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_allowedreturn handler(request, *args, **kwargs)from django.views import Viewclass 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的源码

模板层值模版变量

在html页面中写一个python的代码
PHP:不是后端语言,前端 操作数据量,写逻辑,都可以
python也有点像

{{ 写变量 }}
{% 写逻辑 %}

{{ d.0 }}
{{ d.1 }}
{{ d.3 }}
{{ user_dict.hobby.2 }}
{{ index }}
{{ obj.score }}

相关文章:

  • vscode 配置 lua
  • 量化交易:公司基本面的量化
  • pytorch 安装 2023年
  • 【咖啡品牌分析】Google Maps数据采集咖啡市场数据分析区域分析热度分布分析数据抓取瑞幸星巴克
  • Hoppscotch:开源 API 开发工具,快捷实用 | 开源日报 No.77
  • Polygon zkEVM的Dragon Fruit和Inca Berry升级
  • Python------列表 集合 字典 推导式(本文以 集合为主)
  • 编译智能合约以及前端交互工具库(Web3项目一实战之三)
  • 视频怎么做成二维码?在线教学视频码的制作技巧
  • FISCO BCOS 3.0【02】配置和使用系统自带的控制台
  • MFC 对话框
  • C语言——冒泡排序
  • 从服务器端获取人脸数据,在本地检测特征,并将特征发送给服务器
  • ubuntu20中安装cmake-gui
  • 计算机毕业设计 基于SpringBoot的车辆网位置信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Docker入门(二) - Dockerfile
  • EOS是什么
  • isset在php5.6-和php7.0+的一些差异
  • Java基本数据类型之Number
  • 初探 Vue 生命周期和钩子函数
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从零开始在ubuntu上搭建node开发环境
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 计算机常识 - 收藏集 - 掘金
  • 理解在java “”i=i++;”所发生的事情
  • 你真的知道 == 和 equals 的区别吗?
  • 普通函数和构造函数的区别
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • C# - 为值类型重定义相等性
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (11)MSP430F5529 定时器B
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)Android布局类型(线性布局LinearLayout)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)Linux 多线程条件变量同步
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ... 是什么 ?... 有什么用处?
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET学习教程二——.net基础定义+VS常用设置
  • ??在JSP中,java和JavaScript如何交互?
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [22]. 括号生成
  • [Android] Amazon 的 android 音视频开发文档