day75 Django导读:

## 一.虚拟环境 Virtualenv

- 什么是虚拟环境?

# 虚拟环境是:对真实的python解释器的一个拷贝版本。
# 是事实有效的,可以独立存在运行解释python代码;
# 可以在计算机上拷贝多个虚拟环境;


- 为什么要使用虚拟环境?
# 保证真实环境的纯净性;
# 框架的多版本共存,
# 方便做框架的版本迭代,
# 降低多框架共存的维护成本。


- 如何安装虚拟环境?
  一.终端指令 安装虚拟环境:
# 1.通过pip3安装虚拟环境:
# -- pip3 install virtualenv

# 2.前往目标文件夹:
# -- cd 目标文件夹 (D:\Virtualenv)

# 3.创建纯净虚拟环境:
# -- virtualenv 虚拟环境名 (py3-env1)

# 4.终端启动虚拟环境:
# -- cd py3-env1\Scripts
# -- activate

# 5.进入虚拟环境下的python开发环境
# -- python3

# 6.关闭虚拟环境:
# -- deactivate

# 二.PyCharm的开发项目时,给Django项目创建虚拟环境:
  虚拟环境文件夹可以手动创建,也可在pycharm中定,文件夹名字用英文!!!
  方法1创建工程同时 创建虚拟环境:创建项目->pure python-> new环境用虚拟环境--》首行写工程所在路径,
下面venv的location写虚拟环境文件夹所在路径。
(注意:1.是否要继承源解释器环境中安装的包,不选;2.是否将此虚拟环境提供给其他项目使用,不选)
  方法2:单独创建虚拟环境:到file--》settings--》齿轮选add---》左侧第一个virtual~---》location填具体虚拟环境文件夹路径

# 给Django项目添加虚拟环境:创建项目 -> 选择项目解释器Project Interpreter -> Existing interpreter -> Virtualenv Environment(自定义的虚拟环境) 或 System Interpreter(系统的环境) -> 目标路径下的python.exe
# 删除虚拟环境:Settings -> Project -> Project Interpreter -> Show All
```

## 二.web架构 Django框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。
这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。
# web应用 架构分为:

# C/S 架构 和 B/S 架构。
# client server: 客户端服务器架构,主流用C++语言写。
# browser server:浏览器服务器架构,主流用Java、Python语言写。
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。
# Django的用途:用来完成web框架的B/S架构。

# Django的重要任务(即内部主要干了什么):
1.socket 2.route 3.template
socket连接服务 路由 模板渲染
  • 3大主流web框架:
  • Django - 适用大型项目开发;
  • Flask - 轻便小巧,适用于小型项目开发;
  • Tornado - 三组成部分均自主开发,满足高并发操作。
## 三.http协议

- 什么是http协议?
# HTTP(HyperText Transport Protocol)是超文本传输协议。
# 基于TCP/IP协议基础上的应用层协议,底层实现仍为socket;
# 基于请求-响应模式:通信一定是从客户端开始,服务器端接收到客户端一定会做出对应响应;
# 无状态:协议不对任何一次通信状态和任何数据做保存;
# 无连接:一次连接只完成一次请求-响应,请求-响应完毕后会立即断开连接。
```

- http的工作原理、工作过程:

# 一次http操作称之为一个事务,工作过程可分为四步:
  # 1.客户端与服务端建立连接
  # 2.客户端发生一个http协议指定格式的请求
  # 3.服务器端接收请求后,回应一个http协议指定格式的响应
  # 4.客户端将服务器的响应显示展现给用户

请求报文:
# 请求行  请求头  请求体

  POST / HTTP/1.1\r\n
  Host: 127.0.0.1:8001\r\n
  Connection: keep-alive\r\n
  Upgrade-Insecure-Requests: 1\r\n
  User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36\r\n
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
  Accept-Encoding: gzip, deflate, br\r\n
  Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\r\n
  \r\n
  usr=abc&pwd=123

    响应报文:

 

  # 响应行  响应头  响应体
HTTP/1.1 200 OK\r\n Content-type:text/html\r\n \r\n Login Success

 

注意:
     1.使用http协议的时候, 无论是发送数据请求还是响应数据请求都要严格按照上面的格式进行;
     2.有一方发送数据的格式出错, 数据就不能传送过来。

 


- 状态码
# 1打头:消息通知
# 2打头:请求成功
# 3打头:重定向
# 4打头:客户端错误
# 5打头:服务器端错误


## 四.原生socket

- 关注服务器端

# 完成B/S架构项目的设计思路:
  1 Borwser已经完成;
  2 Server需要手动书写socket,以http协议方式完成响应。(以下写的是服务器代码)

import socket

# 设置响应头(包含响应行)
RESP_HEADER = b'HTTP/1.1 200 OK\r\nContent-type:text/html;charset=utf-8\r\n\r\n'

# 设置服务器socket相关信息
server = socket.socket()
server.bind(('localhost', 8808))
server.listen(5)
print("服务: http://localhost:8808")

while True:
    # 获取Browser浏览器以http协议发来的请求。
    client, address = server.accept()
    data = client.recv(1024)
    # 数据报文 包含:请求行、请求头、请求体。
    print(data)

    # 手动以http协议完成响应。
    # 数据报文 包含:响应行、响应头、响应体。
   client.send(RESP_HEADER)
    
    # /index => 响应主页
    # /login => 登录页面
    # 错误 => 404
    # 数据data, 字节形式 => 字符串形式。
    strData = str(data, encoding='utf-8')
    # 解析请求的数据, 分析得到路由
    my_route = strData.split('\r\n')[0].split(' ')[1]

    # 后台没有设置的路由,统统以404来处理
    dt = b'404'
    # 设置的路由返回响应的页面文件
    if my_route == '/index':
        with open('02_index.html', 'rb') as f:
            dt = f.read()
    if my_route == '/login':
        with open('02_login.html', 'rb') as f:
            dt = f.read()

    # /favicon.ico该请求是往后台请求标签图标
    if my_route == '/favicon.ico':
        with open('favicon.ico', 'rb') as f:
            dt = f.read()
   # 响应体
    client.send(dt)
   # 一次循环,代表一次响应,也就是一次事务的完成, 要关闭http请求连接
    client.close()

 
















posted @ 2019-01-03 21:21  timm_book  阅读(54)  评论(0)    收藏  举报