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

1.http

1.1http请求协议响应协议

1.1.1简介

http协议包含由浏览器发送数据服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字 文本

1.1.2请求格式

1.1.3请求方式getpost请求 

1.2响应协议

1.2.1响应格式

 

1.2.2响应状态码 

状态码的职 是当客户端服务器发送请求时, 返回的请求 结果。借助状态码,用户可以知道服务器端是正常 理了请求,还是出 现了 。状态码如200 OK,以3位数字和原因 成。数字中的 一位指定了响应 别,后两位无分 。响应 别有以5种。

2.web框架 

2.1简介

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

2.2wsgiref模块

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

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

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

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'&lt;h1&gt;Hello, web!</h1&gt;'
    return [data]

if __name__ == '__main__':
    myserver = make_server('', 8011, mya)
    print('监听8010')
    myserver.serve_forever()

3.路由控制

3.1Django路由的作用

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

典型的例子

from django.urls import path

urlpatterns = [
    path('articles', views.special),
]
# articles这个路由对应视图函数special这个方法,浏览器输入这个链接,就会响应到special这个函数来执行

3.2简单路由的配置

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数别名),
]
from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path(r'^articles/2003/$', views.special_case_2003),
    re_path(r'^articles/([0-9]{4})/$', views.year_archive),
    re_path(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    re_path(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

注意:

 3.3path详细使用

path(‘admin/’, login)—》
    等价于:_path(route, view, kwargs=None, name=None)
    第一个参数:
        准确路径字符
        转换器: ‘<int:pk&gt;’  ‘<str:name&gt;’ 
            -127.0.0.1:8080/login/justin—-&gt;path(‘login/<str:name&gt;’, admin.site.urls),
            –视图数中 def login(request,name)
    第二个参数: 视图函数的内存地址  不要加括号
        –路由一旦匹配成功,就会执行 你写的这个视图函数(request),并且会把request对象传入
        -如果有分组的参数[有名,无名],或者转换器的参数,都会被传递到视图函数中作为参数
        –总结:放要放视图函数地址—》但是视图函数的参数:第一个是固定必须是request,后续的取决于写没写转换器,写没写有名无名分组
        
    第三个参数:kwargs 是给视图函数传递默认参数
    第四个参数:路径别名—》后期使用反向解析得到该路径

3.4re_path的详细使用


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

​3.5反向解析

用在视图函数中,用在模板
    –没有转换器的情况:
        path(‘login/’, login,name=’login‘)
        res=reverse(‘login‘)  #当时 定义路径传入的name参数对应字符
    -有转换器的情况:
        path(‘login/<str:name&gt;’, login,name=’login’)
        res=reverse(‘login’,kwargs={name:lqz})  #当时 定义路径传入的name参数对应字符
        生成这种路径:’login/lqz’

3.6路由

为什么默认路由匹配就匹配到了 urls.py ?
        –settings.py 有配置的
        -ROOT_URLCONF = ‘django_demo02.urls
        
    -一个app自己有自己的路由
        -在app创建urls.py 

 

 

 

 

 

 

 

 

 

 

原文地址:https://blog.csdn.net/m0_65470895/article/details/134669025

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_19169.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注