Django之视图
一)文件与文件夹
当我们设定好一个Djiango项目时,里面会有着view.py等文件,也就是文件的方式:

那么我们在后续增加app等时,view.py等文件会显得较为臃肿,当然也根据个人习惯,这时我们可以使用文件夹的方式:
原本我的views.py中有着这些函数:

现在我在web的app下命名一个views的文件夹并且在这个文件夹中创建同名的py文件:

那么使用方法其实并无特别大的改动,只是导入包是需要具体指定:

我们可以多个关联的方法(def)对应着一个py页面就好,这种文件夹的方法我个人觉得适合用于一个app有多个复杂功能有着较多url的场景,这样可以具体的指定方法,也方便我们检查方法代码是否有错误。
二)相对与绝对导入
这个问题其实追求本质就是相对路径与绝对路径。
相对路径:

绝对路径:

那么在这里我们需要注意一个点,不可以在项目的根目录做相对导入。
那么相对导入对比于绝对导入来说,层级会更深层次些。
原因:相对路径比绝对路径层级深是因为相对路径是以当前文件为起点,通过层级关系描述目标文件的位置。相对路径需要根据文件自身的位置进行计算,所以在描述路径时需要考虑更多的层级关系,导致了层级深度的增加。而绝对路径是以根目录为起点,不受文件位置的限制,所以在描述路径时相对简单,不需要考虑层级关系。
三)视图参数
我们在创建方法时,都会以request为默认参数,你是否真的知道request到底时个什么含义呢?
我们先来了解对象,对象我们可以理解成包裹,包裹它可以放很多东西。那么request就是一个对象,它存放了浏览器发送给我们的所有内容:
- 请求的相关所有的数据:当前访问的url,请求方式等…
- django额外添加的数据
我们可以做一个方法来具体获取分析
from django.shortcuts import HttpResponsedef requ(request):# 1.当前URL /api/login/print(request.path_info)# 2.URL传递的参数print(request.GET)print(request.GET.get("age"))# 3.请求方式 GET/POSTprint(request.method)# 4.如果post请求,传递请求体(原始数据)print(request.body) # b'{"code":"083Sjmll2yla694F3bll2DguCM2SjmlG","unionId":"oP6QCsyT_9bk1dfSaVf0GEV5Y-yE"}' b'v1=123&v2=456'# 4.1 请求体+请求头 b'v1=123&v2=456' + content-type:application/x-www-form-urlencodedprint(request.POST)print(request.POST.get("v1"))print(request.POST.get("v2"))# 4.2 请求体+请求头 文件print(request.FILES) # 文件格式 + multipart/form-dataprint(request.FILES.get("n1"))print(request.FILES.get("n2"))# 5.请求头# {'Content-Length': '', 'Content-Type': 'text/plain', 'Host': '127.0.0.1:8000', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Sec-Ch-Ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"', 'Sec-Ch-Ua-Mobile': '?0', 'Sec-Ch-Ua-Platform': '"macOS"', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7', 'Cookie': 'csrftoken=CdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy'}print(request.headers)# 5.1 请求头有个特殊的cookie# request.headers['cookie'] # 'csrftoken=CdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy;session=xxxx'# {'csrftoken': 'CdidpKSGbLxzmOXnbmlkvrZep1eJmKLAA81T73UjcjxEnMOa4YOZqtc849AkYfUy'}print(request.COOKIES)# 6.requests中其他值print(request.resolver_match)return HttpResponse('index')

运行后:


可以看见给我们的控制台反馈了很全的网页源码等数据信息。
四)返回值
1.HttpResponse
格式:
HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
响应体必须是字符串类型,第二个参数可以指定响应头中的相同数据,第三个数据就是可以指定状态码
例如:

结果:


2.JsonResponse
JsonResponse其实算是HttpReponse的一个子类,用于返回json数据(用户端接收的数据)。若要返回json数据,可以使用JsonResponse来构造响应对象,作用是帮助我们将数据转换为json字符串,但是需要设置响应头Content-Type为application/json。
参考格式:
return JsonResponse(data, encoder=DjangoJSONEncoder, safe=True,json_dumps_params=None, **kwargs):
可以如此设置:
return JsonResponse(project_data, json_dumps_params={'ensure_ascii': False}, status=301)
在这个代码中,project_data 是作为响应的数据传递给 JsonResponse 函数。json_dumps_params={‘ensure_ascii’: False} 是为了确保在序列化 JSON 数据时不使用 ASCII 编码,以支持非 ASCII 字符。status=301 表示返回一个 HTTP 301 永久重定向的状态码。
1、第一个参数(data)可以直接传递字典或者嵌套字典的列表2、默认添加content_type为application/json3、默认第一个参数只能为字典,如果为嵌套字典的列表,必须设置safe=False。关掉安全模式
返回嵌套列表的时候,要这样写:
return JsonResponse(project_data_list, safe=False)
3.redirect(重定向)
redirect可以让我们的访问转移到设定上的网站,例如:


那么当我在浏览器访问url为red/时,网站会自动跳转到百度首页
4.渲染html页面
格式:
render(request,"网址路径")
别误解,这个网址路径是在你的项目里需要展示的网站路径,我们需要现在主路由的setting.py文件中找到TEMPLATES的配置文件然后如下修改:

我们可以在每一个应用下设定一个templates文件夹来进行存放各自的html代码,但是如果想要在每一个应用下加上templates来进行查找,需要注册应用,也就是在setting.py中的insetalled——apps里。
但是如果项目的app应用过多,存在着templates里的文件名字一样,会发生什么?在Django架构中,templates的优先级会以注册的app的顺序来。
如何解决?
我们只需要在应用的templates目录下创建一个以应用命名的文件夹存放就可以:

一般项目的公共的templates里面会存放整个项目所需要用到的html代码。




五)FBV CBV
- FBV,视图用函数的形式编写。(目前主流)
- CBV,视图用类的形式编写。(前后端分离的项目中采用的方式)
FBV例子:
admin路由是django自带的一个后台管理系统,可以对model进行基础的增删查改

urlpatterns = [path('index/', index),path("pay/", pay),path("user/", User.as_view()),
#这里的User.as_view()是返回了一个闭包内的函数,这个函数就是用FBV方法写的函数
]
CBV例子:
from django.views import Viewclass User(View):def get(self, request):passdef post(self, request):pass
六)静态资源
那么静态资源其实分为两种
- 开发需要(css、js、图片)
- 公共文件存储在根目录的/static/下
- app所用存储在app目录下的/static/下
- 媒体文件-用户上传的数据(excel/pdf/video)
- 存储在根目录的 /media/
1.静态文件
我们需要在主路由的setting.py中的最后加上如下内容:

在django查找时,其实是惰性查找,当它查找到符合条件的第一个文件就会停止。
在多个app开发时,会将各自的图片放在各自的/static/(app名)目录下

如何使用到?




但是在开发过程中,禁止使用如下语句
<img src="/static/api/1.png">
建议使用{% static %}标签方式:
<img src="{% static 'image/django.jpg' %">

2.媒体文件
访问媒体文件时我们需要在路由中加上媒体文件的配置:

+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
不要忘记导入settings的包


相关文章:
Django之视图
一)文件与文件夹 当我们设定好一个Djiango项目时,里面会有着view.py等文件,也就是文件的方式: 那么我们在后续增加app等时,view.py等文件会显得较为臃肿,当然也根据个人习惯,这时我们可以使用…...
【软件工程_设计模式】——为什么要使用设计模式?
what? 什么是设计模式? why? 为什么要使用设计模式? 使用设计模式的原因如下: 提高代码的可读性和可维护性:设计模式是前人根据经验总结出来的,使用设计模式,就相当于是站在了前人的肩膀上。…...
大数据之Kafka
Kafka概述 传统定义:一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。 最新定义:一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。最主要的功能是做数据的…...
灵活运用OSI模型提升排错能力
1.OSI模型有什么实际价值? 2.二层和三层网络的区别和应用; 3.如何通过OSI模型提升组网排错能力? -- OSI - 开放式系统互联 - OSI参考模型 - 一个互联标准 -- 软件硬件 - 定义标准 数据通信的标准 -- 厂商 思科 华为 华三…...
【最新!企知道AES加密分析】使用Python实现完整解密算法
文章目录 1. 写在前面2. 过debugger3. 抓包分析4. 断点分析5. Python实现解密算法1. 写在前面 最近华为各方面传递出来的消息无不体现出华为科技实力与技术处于遥遥领先的地位。所以出于好奇想要了解一下咱们国内这些互联网科技企业有哪些技术专利,于是就有了这篇文章! 分析目…...
前端架构师之11_JavaScript事件
1 事件处理 1.1 事件概述 在学习事件前,有几个重要的概念需要了解: 事件事件处理程序事件驱动式事件流 事件 可被理解为是JavaScript侦测到的行为。 这些行为指的就是页面的加载、鼠标单击页面、鼠标滑过某个区域等。 事件处理程序 指的就是Java…...
文本过滤工具:grep
什么是grep? grep是一个命令行文本搜索工具,它的名称来源于"Global Regular Expression Print"(全局正则表达式打印)。它的主要功能是在文本文件中查找特定模式或字符串,并将匹配的行打印到终端或输出到文件…...
【Linux】生产者和消费者模型
生产者和消费者概念基于BlockingQueue的生产者消费者模型全部代码 生产者和消费者概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。 生产者和消费者彼此之间不直接通讯,而通过这个容器来通讯,所以生产者生产完数据之后不用等待…...
开发APP的费用是多少
开发一款APP的费用可以因多种因素而异,包括项目的规模、功能、复杂性、技术选择、地理位置等。北京是中国的大城市,APP开发的费用也会受到北京的物价水平和市场竞争的影响。以下是一些可以影响APP开发费用的因素,希望对大家有所帮助。北京木奇…...
start()方法源码分析
当我们创建好一个线程之后,可以调用.start()方法进行启动,start()方法的内部其实是调用本地的start0()方法, 其实Thread.java这个类中的方法在底层的Thread.c文件中都是一一对应的,在Thread.c中start0方法的底层调用了jvm.cpp文件…...
VUE_history模式下页面404错误
uniapp 的history 把#去掉了,但是当刷新页面的时候出现404错误 解决方案:需要服务端支持 如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面 Apache <IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRu…...
现代数据架构-湖仓一体
当前的数据架构已经从数据库、数据仓库,发展到了数据湖、湖仓一体架构,本篇文章从头梳理了一下数据行业发展的脉络。 上世纪,最早出现了关系型数据库,也就是DBMS,有商业的Oracle、 IBM的DB2、Sybase、Informix、 微软…...
最新AI写作系统ChatGPT源码/支持GPT4.0+GPT联网提问/支持ai绘画Midjourney+Prompt应用+MJ以图生图+思维导图生成
一、智能创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&…...
Python机器学习实战-特征重要性分析方法(5):递归特征消除(附源码和实现效果)
实现功能 递归地删除特征并查看它如何影响模型性能。删除时会导致更大下降的特征更重要。 实现代码 from sklearn.ensemble import RandomForestClassifier from sklearn.feature_selection import RFE import pandas as pd from sklearn.datasets import load_breast_cance…...
如何快速走出网站沙盒期(关于优化百度SEO提升排名)
网站沙盒期是指新建立的网站在百度搜索引擎中无法获得好的排名,甚至被完全忽略的现象。这个现象往往发生在新建立的网站上,因为百度需要时间来评估网站的质量和内容。蘑菇号www.mooogu.cn 为了快速走出网站沙盒期,需要优化百度SEO。以下是5个…...
ATA-8000系列射频功率放大器——应用场景介绍
ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W,饱和输出功率最大1000W。增益数控可调,一键保存设置,提供了方便简洁的操作选择,可与主流的信号发生器配套使用,实现射频信号的放大。 图:ATA-8000系…...
2009-2018年各省涉农贷款数据(wind)
2009-2018年各省涉农贷款数据(wind) 1、时间::209-2018年 2、范围:31省 3、来源:wind 4、指标:涉农贷款 指标解释 :在涉农贷款的分类上,按照城乡地域将涉农贷款分为农村贷款和城…...
window.print()打印及出现的问题
<template><transition name"el-zoom-in-center"><div class"JNPF-preview-main"><div class"JNPF-common-page-header"><el-page-header back"goBack" :content"打印通知书" /><div clas…...
Fedora Linux 39 Beta 预估 10 月底发布正式版
Fedora 39 Beta 镜像于今天发布,用户可以根据自己的使用偏好,下载 KDE Plasma,Xfce 和 Cinnamon 等不同桌面环境版本,正式版预估将于 10 月底发布 Fedora 39 Beta 版本主要更新了 DNF 软件包管理器,并优化了 Anaconda …...
【zookeeper】基于Linux环境安装zookeeper集群
前提,需要有几台linux机器,我们可以准备好诸如finalshell来连接linux并且上传文件; 其次Linux需要安装上ssh,并且在/etc/hosts文件中写好其他几台机器的名字和Ip 127.0.0.1 localhost localhost.localdomain localhost4 localh…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
