python全栈开发day59-Django基础

一.今日内容总结

  

    1.HTTP协议:
        请求:浏览器发给服务端的消息
        格式:
            请求方法 URL 协议版本

            k1: v1

            k2: v2

            

            请求体(请求数据)
        
        响应:服务端返回给浏览器的消息
        格式:
            协议版本 状态码 状态描述符

            k1: v1

            k2: v2

            

            响应体(HTML)
    2. web框架
        本质:socket服务端
        
        功能:
            1. socket收发消息        
            2. url和函数的对应关系,根据不同的URL执行不同函数
            3. 字符串的替换(模板渲染)
    3. web框架分类
        实现1、2、3的框架 ——》 tornado
        实现 2、3的框架,使用的第三方1  wsgiref  uwsgi  ——》 django
        实现 2 的框架     ——》 flask
        
        分类:
            1、django
            2、其他
        
    4. 安装django
        1. 命令行: pip install django==1.11.14
        2. pycahrm安装 加号 输入django 选择版本

    5. 启动django:
        1. 命令行:
            python manage.py runserver  # 127.0.0.1:8000
            python manage.py runserver 80 # 127.0.0.1:80
            python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
        2. pycahrm启动
            1. 做配置
            2. 点绿色三角(切记 不要右键启动)
笔记

  1.http

1.http请求格式

请求行
请求方法+空格+请求地址url+空格+请求协议版本+/r/n
请求头部:
头部字段名:值/r/n
...............
/r/n
请求数据
2.http响应格式
响应行
协议版本+空格+状态码+空格+状态码描述+/r/n
响应头部
头部字段名:值/r/n
............
/r/n
响应正文
3.url
以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:
传送协议
层级URL标记符号(为[//],固定不变)
访问资源需要的凭证信息(可省略)
服务器: 域名或IP
端口号
路径:端口号后至?前
查询:问号后
片段:以“#”字符为起点
4.HTTP状态码
状态代码的第一个数字代表当前响应的类型:

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

 

2.socket  web服务器搭建html动态显示版本

  

import socket

sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind(('127.0.0.1',8080))
sk.listen()
while True:
    conn,addr = sk.accept()
    data = conn.recv(8092)

    url = data.decode('utf-8').split('
')[0].split()[1]
    print(url)


    def rihan(url):
        return bytes('日韩', encoding='utf-8')


    def index(url):
        with open('index.html', 'r', encoding='utf-8') as f:
            res = f.read()
        return bytes(res, encoding='utf-8')

    def timer(url):
        import time
        with open('timer.html', 'r', encoding='utf-8') as f:
           res = f.read().replace('@@timer@@', time.strftime('%Y-%m-%d %H-%M-%S'))
        return bytes(res, encoding='utf-8')


    def favicon(url):
        with open('favicon.ico', mode='rb') as f:
            res = f.read()
        return res

    li1 = [
        ("/rihan",rihan),
        ('/index',index),
        ('/timer',timer),
        ('/favicon.ico',favicon),
    ]
    func = None
    for i in li1:
        if i[0] == url:
            func = i[1]
    if func == favicon:
        conn.send(b'http/1.1 200 OK
Content-Type:image/x-icon;charset=utf-8

')
        conn.send(func(url))
    elif func:
        conn.send(b'http/1.1 200 OK
Content-Type:text/html;charset=utf-8

')
        conn.send(func(url))
    else:
        conn.send(b'http/1.1 200 OK
Content-Type:text/html;charset=utf-8

')
        conn.send(b'404')
    conn.close()
html动态显示板

  3.wsgiref模块和jinja2模块组合版本

from jinja2 import Template
from wsgiref.simple_server import make_server 
# 导入模块


def home(url):
    with open('home.html', 'r', encoding='utf-8') as f:
        data = f.read()
    return bytes(data, encoding='utf-8')


def index2(url):
    with open('index2.html', 'r', encoding='utf-8') as f:
        data = f.read()
        template = Template(data)   # 定义模板
        res = template.render({'name': 'alex', 'items': ['抽烟', '喝酒', '烫头']})    # 渲染模板,传参字典类型
    return bytes(res, encoding='utf-8')


dic1 = {
    '/home/': home,
    '/index2/': index2,
}


def run_server(environ,start_response):
    start_response('200 Ok', [('Content-Type', 'text/html;charset=utf-8'), ])   # 响应行,响应头部
    url = environ['PATH_INFO']
    func = dic1.get(url)
    print(url)
    if func:
        response = func(url)
    else:
        response = b'404 not found!!!'

    return [response, ]


if __name__ == '__main__':
    httpd = make_server('127.0.0.1', 8000, run_server) 
    print('服务器已启动!')
    httpd.serve_forever()
View Code

  4.启动Djongo

   命令行安装:pip install django==1.11.14

   命令创建工程:django-admin.py startproject 项目名

   启动项目:

    命令行方法:

    

    pycharm方法:

  

   

  

  

二.预习和扩展

  1.Django2.0 path与Django1.x版本url正则匹配问题

 

2.0内的path匹配正则时候无效,

导入re_path即可匹配正则

 

原文地址:https://www.cnblogs.com/wuchenggong/p/9355085.html