zoukankan      html  css  js  c++  java
  • 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即可匹配正则

     

  • 相关阅读:
    modCount到底是干什么的呢
    Java 8 中的 Streams API 详解
    2017年3月16工作日志【mysql更改字段参数、java8 map()调用方法示例】
    jquery选择器之获取父级元素、同级元素、子元素
    Java8必知必会
    javascript es6 Promise 异步同步的写法(史上最简单的教程了)
    sublime插件开发教程4
    sublime插件开发教程3
    sublime插件开发教程2
    sublime插件开发教程1
  • 原文地址:https://www.cnblogs.com/wuchenggong/p/9355085.html
Copyright © 2011-2022 走看看