Django回顾【二】

news2024/12/25 0:43:58

目录

一、Web框架

二、WSGI协议

三、 Django框架

1、MVC与MTV模型

2、Django的下载与使用

补充

3、启动django项目

补充

5、 Django请求生命周期

四、路由控制

1、路由是什么?

2、如何使用

3、path详细使用

4、re_path详细使用

5、反向解析

6、路由分发

五、视图层

1、格式

2、request对象


一、Web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

即别人帮咱们写了一些基础代码 -------》我们只需要在固定的位置写固定的代码 ------》就能实现一个web应用

二、WSGI协议

最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。

如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI。

基于这个协议的web服务器

  • wsgiref:Django框架默认就用它-------》性能低,并发量低-------》测试阶段使用
  • uwsgi:C语言写的
  • gunicorn:Python写的

协议到底怎么规定的:

  • web服务器后面的python框架一定是一个可调用的对象,必须接收两个参数(environ,start_response)
    • environ它是个字典------》里面全是http请求的东西

使用wsgiref写个web服务

from wsgiref.simple_server import make_server

def mya(environ, start_response):
    print(environ)
    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':
        with open('index.html','rb') as f:
            data=f.read()

    elif environ.get('PATH_INFO') == '/login':
        with open('login.html', 'rb') as f:
            data = f.read()
    else:
        data=b'<h1>Hello, web!</h1>'
    return [data]

# 可调用对象---》能加括号执行的对象
if __name__ == '__main__':
    myserver = make_server('', 8011, mya) 
    # 请求来了---》经过wsgiref---》调用后面的可调用对象
    # ---》传入两个参数(environ, start_response)
    print('监听8011')
    myserver.serve_forever()

三、 Django框架

1、MVC与MTV模型

所有Web框架其实都遵循MVC架构

1.1 MVC:把本来坨在一起的代码拆到不同的位置

MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。

1.2 MTV

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

  • M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
    • M就是原来的M
  • T 代表模板 (Template):负责如何把页面展示给用户(html)。
    • T就是原来的V
  • V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
    • V+路由是原来的C

2、Django的下载与使用

在命令行输入:

  • pip uninstall django
  • pip3 install django==3.2.20
pip uninstall django  # 卸载
pip3 install django   # 如果不指定就会装最新版本

创建项目:

  • 命令创建:django-admin startproject 项目名
    • django-admin(会在python安装目录下的script文件夹多出一个可执行文件)
  • 使用pycharm创建
    • 本质也是在执行这个命令,编辑器帮咱们做了

目录结构:

补充

  • python 解释器安装完 -----》有几个重要的文件和文件夹
    • 根路径下  python.exe ----> 可以复制改名 -----》做多版本共存
    • scripts文件夹:pip命令在它下面,后期咱们会装 第三模块[可能会有可执行文件,可执行文件都放在这]
    • Lib:一堆文件夹中有py文件
      • python的解释器
        • 有些代码是用c写的    字典,列表
        • 有些代码是用python自己写的 :使用语言自己写自己:自举
      • 内置的模块自举的代码
      • 第三方包site-package---
  • 环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。

  • 环境变量的作用
    • 当要求系统(cmd)运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录(cmd当前的路径)下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
    • 就是说,将一个程序的位置加入到环境变量后,回到命令窗口,不管此时的cmd在任何目录下,只要输入程序名(不区分大小写,不用带后缀.exe),这个程序就会启动。较之前的每次运行不同程序都要切换路径的方式,实在方便太多了。

3、启动django项目

python manage.py runserver 8001

这样我们的django就启动起来了!当我们访问:http://127.0.0.1:8080/时就可以看到: 

补充

0.0.0.0和localhost和127.0.0.1有什么区别?

1、0.0.0.0
严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。

它表示的是一个集合:所有 不清楚 的主机和目的网络。

“不清楚”:在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果在网络设置中设置了缺省网关,那Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。

用途:

  • 当一台主机还没有被分配一个IP地址的时候,用于表示主机本身。(DHCP分配IP地址的时候)
  • 用作默认路由,表示"任意IPV4主机”,即当路由表中没有找到完全匹配的路由的时候所对应的路由。
  • 用作服务端,表示本机上的任意IPV4地址。在服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。
  • 用来表示目标机器不可用。
  • 监听0.0.0.0的端口,来监听本机中所有IP的端口。

2、127.0.0.1(一种本机保留的私有 IP)
本机地址,主要用于测试,即“我自己”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。

127.0.0.1属于{127,}集合中的一个,而所有网络号为127的地址都被称之为环回地址,环回地址!== 127.0.0.1,它们是包含关系,即环回地址包含 127.0.0.1。

环回地址:所有发往该类地址的数据包都应该被loop back。所有发往目标IP为127.0.0.1的数据包都不会通过网卡发送到网络上,而是在数据离开网络层时将其回送给本机的有关进程。

用途:

  • 环回测试,通过使用ping 127.0.0.1 测试某台机器上的网络设备,操作系统或者TCP/IP实现是否工作正常。
  • DDos攻击防御:网站收到DDos攻击之后,将域名A记录到127.0.0.1,即让攻击者自己攻击自己。
  • 大部分Web容器测试的时候绑定的本机地址。
  • 一般会通过ping 127.0.0.1来测试某台机器上的网络设备是否工作正常。

3、localhost

相比127.0.0.1,localhost具有更多的意义。localhost是个域名,而不是一个ip地址。可修改。

用于指代 this computer 或者 this host,可以用它来获取运行在本机上的网络服务。

在大多数系统中,localhost被指向了 IPV4 的 127.0.0.1 和 IPV6 的 ::1,这就是把localhost与127.0.0.1等同的原因。

总结:

  • 0.0.0.0是一个特殊目的 IP 地址,称作不可路由 IP 地址,它的用途会被特殊规定。通常情况下,当我们把一个服务绑定到0.0.0.0,相当于把服务绑定到任意的 IP 地址。比如一台服务器上有多个网卡,不同网卡连接不同的网络,如果服务绑定到 0.0.0.0 就可以保证服务在多个 IP 地址上都可以用。
  • localhost指代的是本地计算机,用于访问绑定在 loopback 上的服务。localhost 是一个主机名,不仅仅可以指向 IPv4 的本地回环地址,也可以指向 IPv6 的本地回环地址 [::1]。
  • 127.0.0.1是本地回环地址(loopback),发送到 loopback 的数据会被转发到本地应用。

5、 Django请求生命周期

四、路由控制

1、路由是什么?

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。即请求路径和要执行的视图函数的对应关系。

2、如何使用

  • 放在列表中:urlpatterns = [] ----> 列表中的数据,必须是 path或re_path执行完的结果
    • path:准确路径,精准匹配---》以后基本都是path
    • re_path:使用正则匹配---》就是原来的url---》使用非常少

3、path详细使用

path('admin/', login)
等价于:_path(route, view, kwargs=None, name=None)

第一个参数:准确路径,字符串

转换器: '<int:pk>'  '<str:name>' 

  • 127.0.0.1:8080/login/justin ----> path('login/<str:name>', admin.site.urls),
  • 视图函数中
    • def login(request,name) 

第二个参数: 视图函数的内存地址,不要加括号

  • 路由一旦匹配成功,就会执行你写的这个视图函数(request),并且会把request对象传入
  • 如果有分组的参数[有名,无名],或者转换器的参数,都会被传递到视图函数中作为参数
  • 总结:放要放视图函数地址-----》但是视图函数的参数:第一个是固定必须是request,后续的取决于写没写转换器,写没写有名无名分组

第三个参数:kwargs是给视图函数传递默认参数

第四个参数:路径的别名 -----》后期使用反向解析得到该路径

4、re_path详细使用

  • 跟path除了第一个参数不一样,其他完全一样
    • 第一个参数是:正则表达式
  • 后期用的很少,危险性大 -----》原来之所以支持正则的目的是为了分组出参数
  • path通过转换器能完成这个操作 ----》于是这个几乎不用

5、反向解析

在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。

没有转换器的情况:

path('login/', login,name='login')
res = reverse('login')  # 当时定义路径传入的name参数对应的字符串

有转换器的情况:

path('login/<str:name>', login,name='login')
res = reverse('login',kwargs={name:lqz})  # 当时定义路径传入的name参数对应的字符串
生成这种路径:'login/lqz'1

6、路由分发

#主urls
from django.urls import path,re_path,include
from app01 import views
from app01 import urls
urlpatterns = [ 
  # re_path(r'^app01/',include('app01.urls')),#行
  # re_path(r'^app01/&',include('app01.urls')),#不行
  # path('app01/',include('app01.urls')),#行 
  #path('app01/', include(urls)),
]

在app01里创建一个urls

from django.urls import path,re_path
from app01 import views
urlpatterns = [
    re_path(r'^test/(?P<year>[0-9]{2})/$',views.url_test),
]

五、视图层

views.py ----》这个文件目前写的是视图函数 

1、格式

def 视图函数(request):
    return 四件套

2、request对象

常用的:

request.path
request.method
request.GET
requets.POST
requets.body
request.get_full_path()  # 方法
request.files   # 前端携带文件过来---》转成了字典,根据文件的名字取到文件对象

不常用:

request.cookie
request.session
request.content_type  # 提交的编码格式:urlencoded(form表单),json,form-data,text/plain(一般不用,浏览器默认的格式)
request.META: 请求头中得数据
     user-agent:HTTP_USER_AGENT
     referer:
     客户端ip地址:REMOTE_ADDR
     用户自定义的  
           定义:name=lqz
           取:request.META.get('HTTP_NAME')  # 前面加HTTP_ 把自定义的转成大写
request.user  # auth
request.is_ajax() 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1263329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

The Sandbox 与 Shemaroo Entertainment 达成合作,将宝莱坞标杆作品带入元宇宙

我们非常高兴地宣布与印度领先的媒体和娱乐集团 Shemaroo Entertainment 建立合作伙伴关系。BharatBox 是全新的文化元宇宙中心&#xff0c;将展示印度娱乐业的知名艺术家和品牌。该项目标志着 Shemaroo 将逐步涉足数字领域&#xff0c;将电影传统与最先进的技术相结合&#xf…

算法之插入排序及希尔排序(C语言版)

我们来实现上述排序 一.插入排序. 当插入第i(i>1)个元素时&#xff0c;前面的array[0],array[1],.,array[i-1]已经排好序&#xff0c;此时用array[i的排序码与array[i-1]array[i-2].的排序码顺序进行比较&#xff0c;找到插入位置即将arrayU插入&#xff0c;原来位置上的元…

【小布_ORACLE】Part11-1--RMAN Backups笔记

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…

安卓开发学习---kotlin版---笔记(一)

Hello word 前言&#xff1a;上次学习安卓&#xff0c;学了Java开发&#xff0c;简单的搭了几个安卓界面。这次要学习Kotlin语言&#xff0c;然后开发安卓&#xff0c;趁着还年轻&#xff0c;学点新东西&#xff0c;坚持~ 未来的你会感谢现在努力的你~ 主要学习资料&#xff1a…

使用Python进行帧提取及指定帧插入实现文本隐写(CTF杂项出题方向)

视频是由一系列连续的图像帧组成的&#xff0c;每一帧都是视频的静止画面。这些帧以一定的速率播放&#xff0c;就形成了运动的视频。以下是视频帧的一些基本概念&#xff1a; 帧率&#xff08;Frame Rate&#xff09;&#xff1a; 帧率表示每秒播放的图像帧数量。通常以“帧/秒…

性能自动化测试?

一、思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力超负荷运行下的稳定性系统瓶颈 自动化测试 使用程序代替手工提升测试效率性能自动化 使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数&#xff0c;统计系统负载能力生成报告 2.Python中的性能…

【JavaEE初阶】——Linux 基本使用和 web 程序部署(下)

文章目录 前言一、Linux 常用命令 1.1 ls 命令 1.2 pwd 命令 1.3 cd 命令 1.4 touch 命令 1.5 cat 命令 1.6 mkdir 命令 1.7 rm 命令 1.8 cp 命令 1.9 mv 命令 1.10 man 命令 1.11 less 命令 1.12 head 命令 1.13 tail 命…

leetcode LCR24反转单链表

反转单链表 题目描述 题目分析 先来说迭代的思想&#xff1a; 上面next cur->next应该放在cur->next pre前面执行&#xff0c;这里笔误 再来说递归的思想&#xff1a; 题目代码 这个代码里面我加了我自己写的测试数据&#xff0c;自己可以去找对应的部分&#xff0c…

Charles下载安装及配置之Mac

因工作需要用到抓包工具&#xff0c;但Fiddler不能在mac上使用&#xff0c;所以找到了Charles&#xff0c;Charles其实是一款代理服务器&#xff0c;通过过将自己设置成系统&#xff08;电脑或者浏览器&#xff09;的网络访问代理服务器&#xff0c;然后截取请求和请求结果达到…

集结!Milvus 老友汇 · 线下 Meetup 来袭

AGI 时代&#xff0c;当“大模型的记忆体”——向量数据库&#xff0c;邂逅 Cloud-Native 的数据管理平台及 AI-Native 的应用&#xff0c;会迸发出怎样的化学反应&#xff1f; 12 月 9 日&#xff01;上海&#xff01;Milvus 社区携手 KubeBlocks 社区&#xff0c;集结来自两大…

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器 文章目录 可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 …

OpenCvSharp从入门到实践-(05)通道

目录 1、拆分通道 1.1、实例1-拆分一副BGR图像的通道 1.2、实例2-拆分一副HSV图像的通道 2、合并通道 2.1 实例3-合并通道的顺序不同&#xff0c;图像的显示效果也不通 实例4-合格H通道图像、S通道图像、V通道图像 3、综合运用拆分通道和合并通道 2.2、实例5-只把H通道的…

Windows10免安装PostgreSQL

1. PostgreSQL简介2. 下载3. 安装环境4. 安装 4.1. 初始化数据库4.2. 启动数据库4.3. 注册服务4.3. 卸载服务 1. PostgreSQL简介 PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统&#xff0c;是以加州大学计算机系开发的 POSTGRES 4.2版本为基础的对象关…

羽隔已就之图像处理之BP神经网络入门

小y最近非常忙&#xff0c;这一年来&#xff0c;活很多&#xff0c;一直在加班、出差&#xff0c;也没好好休息过。最近在武汉出差一个多月了&#xff0c;项目逐渐完结&#xff0c;有点闲时间了&#xff0c;回首望&#xff0c;这一年设定的很多目标都没完成。 还记得&#xff0…

智慧博物馆视频监控系统设计,可视化AI智能分析技术助力博物馆多维度监管

一、背景与需求 博物馆视频智能监控系统是智慧博物馆建设的重要组成部分&#xff0c;传统的博物馆视频监控系统以模拟系统架构为主&#xff0c;存在监管效率低、各个系统独立运作形成数据孤岛、以“事后补救”为主要监管手段等管理弊病&#xff0c;无法满足互联网高速发展背景…

如何获取高质量的静态住宅IP代理?常见误区与注意事项

静态住宅IP代理在今天的网络营销领域扮演着至关重要的角色&#xff0c;静态住宅IP代理以其稳定性和高匿名性&#xff0c;为互联网业务提供了一个安全的执行环境。通过模拟真实用户的网络行为&#xff0c;这些IP代理降低了企业在网络营销活动中被识别和封禁的风险。它保护了企业…

Postgresql数据库运维统计信息

如果需要使用以下运维信息&#xff0c;需要如下几步 修改postgresql.conf文件 #shared_preload_libraries # (change requires restart)shared_preload_libraries pg_stat_statements重启数据库创建扩展 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;1. 统计信息…

java: Internal error in the mapping processor: java.lang.NullPointerException

启动java项目出错&#xff0c;其他人工程没有问题&#xff0c;别着急。 java: Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.ap.internal.processor.DefaultVersionInformation.createManifestUrl(DefaultVersionInformation.j…

微信如何养号?

目前导致微信封号的几点原因如下&#xff1a; 1.使用虚拟定位软件&#xff0c;进行附近人任务&#xff0c;频繁的切换ip&#xff0c;极易被判定微信被盗,对其封号 2.频发的群发骚扰消息&#xff0c;朋友圈发送过于频繁&#xff0c;给别人造成骚扰及其投诉 3.和微信好友聊天涉…

Python接口自动化测试 ---Allure报告使用详解

这一节主要是记录allure的内容以及用法&#xff0c;怎么让他生成一个完整的想要的报告。 allure生成的报告和其他五花八门的报告对比了一下&#xff0c;它的可读性是最好、最直观的。这不仅仅是我想要的效果&#xff0c;也是很多小伙伴想要的结果&#xff0c;毕竟这是给领导看…