HTTP协议及Django配置

一、HTTP 请求/响应的步骤

1. 客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.luffycity.com。

2. 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3. 服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4. 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

二、HTTP状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

状态代码的第一个数字代表当前响应的类型:

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

虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。

三、URL

超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:

  • 传送协议。
  • 层级URL标记符号(为[//],固定不变)
  • 访问资源需要的凭证信息(可省略)
  • 服务器。(通常为域名,有时为IP地址)
  • 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
  • 路径。(以“/”字符区别路径中的每一个目录名称)
  • 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
  • 片段。以“#”字符为起点

以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:

http,是协议;
www.luffycity.com,是服务器;
80,是服务器上的网络端口号;
/news/index.html,是路径;
?id=250&page=1,是查询。

四、HTTP请求格式

五、HTTP响应格式

 

六、Django安装配置

1、安装

pip3 install django==1.11.9

2、创建

django-admin startproject mysite

3、目录介绍

mysite/
├── manage.py  # 管理文件
└── mysite  # 项目目录
    ├── __init__.py
    ├── settings.py  # 配置
    ├── urls.py  # 路由 --> URL和函数的对应关系
    └── wsgi.py  # runserver命令就使用wsgiref模块做简单的web server

4、运行Django项目

python manage.py runserver 127.0.0.1:8000

5、相关配置

Django
1. 安装
    1. Django版本 1.11.xx
    2. 安装方式
        1. 命令行:pip3 install django==1.11.9        
                   --> Python环境(双版本,pip的使用)
        2. PyCharm安装
        
2. 创建Django项目
    1. 创建方式
        1. 命令行创建方式
            1. cd到你要保存Django项目的目录
            2. Django-admin startproject 项目名   --> 会在当前目录创建Django项目
        2. PyCharm创建方式
            1. File --> new project --> ...
            2. 创建完之后一定要选在新窗口打开!!!
            
3. 配置Django项目
    1. settings.py文件
        1. templates文件夹的位置
        2. 静态文件
            1. STATIC_URL         --> 静态文件夹的别名(在HTML文件中用的)
            2. STATICFILES_DIRS   --> 静态文件夹的真正路径
        3. 注释掉 csrf 相关的中间件(可以不注释)
        4. Django项目连接的数据库信息
        
4. Django WEB请求流程(简版)    
    1. 启动Django项目,等待用户连接
    2. 浏览器在地址栏输入URL,来连接我的Django项目
    3. 在urls.py中 找 路径和函数的 对应关系
    4. 执行对应的函数  render(request," .url")
    5. 返回响应  HttpResponse()
    
5. views.py
    1. 专门用来定义处理请求的函数
        1. 基本必备三件套
            from django.shortcuts import HttpResponse, render, redirect
            1. HttpResponse("要返回的内容")            --> 通常用于直接返回数据
            2. render(request, "html文件", {"k1": v1}) --> 返回一个HTML文件或者打开文件进行字符串替换
            3. redirect("URL")                         --> 告诉用户的浏览器去访问其他的URL
    
        2. request相关
            1. request.method     --> 查看请求的方法
            2. request.POST       --> 获取POST请求的数据
            
6. ORM使用
    1. 什么是ORM? 
        是一种编程的方法论(模型), 和语言无关.(其他的语言也有类似的实现.)
        
    2. ORM的本质:
        类    --->    数据表
        对象  --->    数据行
        属性  --->    字段
        按照规定的语法写,自动翻译成对应的SQL语句.
        
    3. ORM的功能:    
        ORM操作数据表
        ORM操作数据行
        
    4. Django里ORM的使用:
       (1) 手动创建数据库
       (2) 在settings.py里面,配置数据库的连接信息
            DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': 'day62',
                    'HOST': '127.0.0.1',
                    'PORT': 3306,
                    'USER': 'root',
                    'PASSWORD': '123456',
                }
            }
       (3)在项目/__init__.py告诉Django用pymysql模块代替MySQLdb来连接MySQL数据库
            import pymysql
            pymysql.install_as_MySQLdb()
       (4) 在app/models.py里面定义类
            # 出版社
            class Publisher(models.Model):
                id = models.AutoField(primary_key=True)  # 自增的ID主键
                # 创建一个varchar(64)的唯一的不为空的字段
                name = models.CharField(max_length=64, null=False, unique=True)
      (5)执行两个命令
            1. python manage.py makemigrations   --> 把models.py里面的更改记录到小本本上
            2. python manage.py migrate  --> 把更改翻译成SQL语句,去数据库执行

七、Django终端打印SQL语句

在Django项目的settings.py文件中,在最后复制粘贴如下代码:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

 

 八、在Python脚本中调用Django环境

import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BMS.settings")
    import django
    django.setup()

    from app01 import models

    books = models.Book.objects.all()
    print(books)

 

posted @ 2019-05-13 13:26  timetellu  阅读(670)  评论(0编辑  收藏  举报