http协议和django初识

HTTP协议

名称:超文本传输协议(英文:H yperT ext T ransfer Protocol,缩写:HTTP)

版本: 1.1, 目前有2.0版本,只不过没有广泛应用

http协议是基于TCP/IP协议之上的应用层协议。 分为两步:请求 -- 响应

请求和响应步骤

复制代码
​
例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
​
1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5. 释放 TCP连接;
6. 浏览器将该 html 文本并显示内容; 
复制代码
GET /1.jpg HTTP/1.1
Host: 127.0.0.1:8001
Connection: keep-alive
sec-ch-ua: "Chromium";v="86", "\"Not\\A;Brand";v="99", "Google Chrome";v="86"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: image
Referer: http://127.0.0.1:8001/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
​

请求消息格式:

请求数据说明: GET请求方法的请求数据在请求函个的URL部分,POST请求携带的数据在请求数据部分.

请求头键值对:

复制代码
    USER-AGENT:chorme....   客户代理程序信息
•   HOST: 请求的服务端地址
•   Accept: 客户端可以接受的数据类型

GET请求

复制代码
1 浏览器输入网址回车,就是get请求方法
2 a标签,href=='http://www.baidu.com'  get请求方法
​
​

post请求

复制代码
提交数据
1 form表单标签中用户输入的内容,点击提交按钮,一般都是用post请求
    form标签,action='路由' method='post',默认是get

get和post的简答区别

复制代码
    GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.(POST方法是把提交的数据放在HTTP包的请求数据部分.
    GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
    POST的数据不再url上面显示,所以看着安全一些.

network中看到的内容解释

复制代码
General部分
​
Request URL: http://127.0.0.1:8080/   请求地址
Request Method: GET   请求方法
Status Code: 200 OK   响应状态码和描述
Remote Address: 127.0.0.1:8080    客户端的地址(ip+port)
        
request headers 请求头部键值对信息
response headers  响应头部键值对信息
​
​

查看network的步骤

响应信息格式

重定向的大致过程

状态码

复制代码
​
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误

URL : 统一资源定位符

复制代码
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
​
1 传送协议。  HTTP/HTTPS...
2 层级URL标记符号(为[//],固定不变)
3 服务器。(通常为域名,有时为IP地址)
​
4 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
    
5 路径。(以“/”字符区别路径中的每一个目录名称)
6 查询参数。(GET模式的参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据)
    // https://www.cnblogs.com/clschao/articles/9230431.html?a=1&b=2

模板渲染

jinja2模块简单使用

复制代码
pip3 install jinja2

使用

视图函数中写法

复制代码
​
from jinja2 import Template
​
def html():
​
    with open('beatfulpage.html', 'r', encoding='utf-8') as f:
        data = f.read()
    template = Template(data)
    ret = template.render({"name": "于谦", "hobby_list": ["烫头", "泡吧"]})
    data = ret.encode()
    return data

HTML文件中的语法

复制代码
<h1>{{name}}</h1>
<ul>
    {% for i in hobby_list %}
    <li>{{i}}</li>
    {% endfor %}
</ul>
​

MVC和MTV模式

MVC

Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起.

django是MTV模式,其实就是从MVC模式加工过来的.

复制代码
M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。  模板渲染功能
V 代表视图(View):   负责业务逻辑,并在适当时候调用Model和Template。
​
+ url控制器   urls.py文件:  路径和视图函数的映射关系

django下载安装

复制代码
pip install django==1.11.9

创建项目

指令创建

复制代码
django-admin startproject luffy(项目名称)

创建应用

复制代码
python manage.py startapp piao(应用app名称)

在项目的settings.py文件中

复制代码
​
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'piao.apps.PiaoConfig',  # 两种写法都可以
    # 'piao', # 加上应用名称
]
​

pycharm创建django项目

在more settings的地方可以创建一个初始的应用.

完成一个简单的web项目

第一步

urls.py文件中设置路径和函数的对应关系

复制代码
​
from django.conf.urls import url
from django.contrib import admin
from piao import views
​
urlpatterns = [
    url(r'^admin/', admin.site.urls),
​
    url(r'^home/', views.home),
​
​
​
]

第二步,在views.py文件中写视图函数

复制代码
from django.shortcuts import render
​
# Create your views here.
​
# envrion字典加工成了一个对象
# wsgirequest类的对象
# class USGIRequest:
#   def __init__(self):
#       self.path = environ['PATH_INFO']
#       self.path = environ['PATH_INFO']
#       self.path = environ['PATH_INFO']
#       self.path = environ['PATH_INFO']
​
def home(request): # 参数名称业内一般都写成request,
​
    print(request.path)  #当前请求路径
    current_user = '昭志'
    ret = render(request, 'home.html', {'username': current_user})
​
    return ret
​

第三步:

在templates文件夹中创建一个home.html文件,内容如下

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
​
​
​
<h1>欢迎尊贵的{{ username }}至尊会员,来到32期spa会所</h1>
​
​
</body>
</html>

注意:在settings.py文件中加上如下配置

复制代码
​
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 'DIRS': os.path.join(BASE_DIR , 'templates'),
        'DIRS': [BASE_DIR , 'templates'],  #注意这个配置
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
相关推荐
路边草随风8 小时前
langchain agent动态变更系统prompt
人工智能·python·langchain·prompt
哥本哈士奇(aspnetx)15 小时前
Streamlit + LangChain 1.0 简单实现智能问答前后端
python·大模型
我一定会有钱15 小时前
斐波纳契数列、end关键字
python
小鸡吃米…16 小时前
Python 列表
开发语言·python
星依网络17 小时前
yolov5实现游戏图像识别与后续辅助功能
python·开源·游戏程序·骨骼绑定
大佐不会说日语~17 小时前
Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践
人工智能·spring boot·python·spring·封装·spring ai
2501_9216494918 小时前
如何获取美股实时行情:Python 量化交易指南
开发语言·后端·python·websocket·金融
qq_4480111618 小时前
python HTTP请求同时返回为JSON的异常处理
python·http·json
棒棒的皮皮18 小时前
【OpenCV】Python图像处理几何变换之翻转
图像处理·python·opencv·计算机视觉