day66

今日回顾内容

web框架
django
路由控制
视图层

web框架

一、什么是web框架

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

1.1 wsgiref模块

WSGI(Web Server Gateway Interface,web服务器网关接口)主要规定了服务器端和应用程序之间的接口,即规定了请求的URL到后台处理函数之间的映射该如何实现。wsgiref是一个帮助开发者开发测试的Python内置库,程序员可以通过这个库了解WSGI的基本运行原理,但是不能把它用在生产环境上。

1.2  使用wsgiref写个web服务
 from wsgiref.simple_server import make_serverdef 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

一、MVC与MTV模型

1.1、MVC

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

1.2、MTV

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

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

除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。
一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

 二、Django的下载与基本命令

1.1、下载Django

方式一:在命令行输入:pip3 install django

   pip install django==3.2.12 -i http://pypi.hustunique.org/simple 指定版本号,指定国内镜像

方式二:用pycharm安装

方式三:用pycharm的Terminal的命令行安装

 1.2、创建一个django project
django-admin startproject 项目名
python manage.py startapp 应用名
python manage.py runserver 127.0.0.1:8080 # 启动django
1.3、Django目录结构
 
 1.4、Django的请求生命周期

路由控制

一、什么是路由

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

1.1、如何使用

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

1.2、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 是给视图函数传递默认参数
    第四个参数:路径的别名---》后期使用反向解析得到该路径

1.3、re_path的详细使用

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

二、反向解析

 在使用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

 三、路由分发

#主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)),
]

 在应用中创建一个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),
]

 视图层

一、视图函数

一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你的Python目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中。

 视图函数必须写成这样
def 视图函数(request):
    return 四件套

1.1、request对象

它是http请求(数据包---》字符串形式)---》拆分成了django中得request对象
    常用的:
        request.path   一个字符串,表示请求的路径,不包括域名或者站点根 URL 的路径。
        request.method   一个字符串,表示 HTTP 请求的方法。常见的值有 "GET","POST" 等。
        request.GET   一个类似字典的对象,包含所有的 GET 参数。
        requets.POST   一个类似字典的对象,包含所有的 POST 参数。
        requets.body   http请求的主体,二进制格式。
        request.get_full_path()  # 方法
        request.files   一个类似字典的对象,包含所有的上传文件
       

    不常用
         request.cookie   一个字典,包含所有的 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.hqwc.cn/news/225577.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人机交互2——任务型多轮对话的控制和生成

1.自然语言理解模块 2.对话管理模块 3.自然语言生成模块

LFM信号分析

LFM信号 在时域中&#xff0c;理想线性调频信号持续时间为 T T T 秒&#xff0c;振幅为一常量&#xff0c;中心频率为 f c e n t e r f_{center} fcenter​ &#xff0c;相位 θ ( t ) \theta(t) θ(t) 随时间按一定规律变化。当 f c e n t e r f_{center} fcenter​ 为0时…

初识Linux(2).妈妈再也不用担心我Linux找不到门了。

文章目录 前言 1.man指令&#xff08;重要&#xff09;&#xff1a;例如&#xff1a; 2.cp指令&#xff08;重要&#xff09;&#xff1a;例如&#xff1a;把123.txt复制到a目录中类似window如下操作&#xff1a; 3.mv例如&#xff1a;类似window如下操作&#xff1a; 4.nano例…

车内总线通信技术简述

1. 前言 本文主要分享一些汽车总线通信技术&#xff08;CAN、CANFD、LIN、Flex Ray、MOST、LVDS、TTP/C、Ethernet&#xff09;&#xff0c;希望对大家能有所帮助。 2. 多种汽车总线通信技术 2.1 CAN CAN&#xff08;Controller Area Network&#xff09;全称为“控制器局域…

leetcode:2549. 统计桌面上的不同数字(python3解法)

难度&#xff1a;简单 给你一个正整数 n &#xff0c;开始时&#xff0c;它放在桌面上。在 109 天内&#xff0c;每天都要执行下述步骤&#xff1a; 对于出现在桌面上的每个数字 x &#xff0c;找出符合 1 < i < n 且满足 x % i 1 的所有数字 i 。然后&#xff0c;将这些…

Python向Excel写入内容的方法大全

在数据处理和分析中&#xff0c;将Python中的数据写入Excel是一项常见任务。 本文将介绍几种常见的方法&#xff0c;以及如何使用它们向Excel中写入内容。 方法一&#xff1a;使用openpyxl库 openpyxl是一个功能强大的库&#xff0c;用于读写Excel文件。以下是一个简单的使用…

Git安装

简单粗暴&#xff0c;跟着步骤一步一步来 右键就会有了

高级/进阶”算法和数据结构书籍推荐

“高级/进阶”算法和数据结构书籍推荐《高级算法和数据结构》 高级算法和数据结构 为什么要选择本书 谈及为什么需要花时间学算法&#xff0c;我至少可以列举出三个很好的理由。 (1)性能&#xff1a;选择正确的算法可以显著提升应用程序的速度。仅就搜索来说&#xff0c;用二…

负索引和负方向

在python里有序集合的index位置信息可正可负&#xff0c;方向可以从左向右或从右向左。以“python”字符串通过list函数转化生成的列表为例&#xff0c;其正负位置信息index值如下所示&#xff1a; 0 1 2 3 4 5 p y t h o n -6 -5 -4 -3 -2 -1 故&#xff0c;切片的start、end、…

LabVIEWL实现鸟巢等大型结构健康监测

LabVIEWL实现鸟巢等大型结构健康监测 管理国家地震防备和减灾的政府机构中国地震局(CEA)选择了七座新建的巨型结构作为结构健康监测(SHM)技术的测试台。这些标志性建筑包括北京2008年夏季奥运会场馆&#xff08;包括北京国家体育场和北京国家游泳中心&#xff09;、上海104层的…

深度学习毕设项目 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&am…

java学习part15单例模式

107-面向对象(高级)-单例设计模式与main()的理解_哔哩哔哩_bilibili 1.单例 就是说在某些开发场景中&#xff0c;某个类只要有一个对象就足够使用了&#xff0c;不需要重复创建。 &#xff08;理解&#xff1a;比如说是数据库对象&#xff0c;使用时创建一个可以处理所有的数…