• django基础


    一:web应用

    本质上:浏览器是一个socket客户端,服务器是socket服务端

    基于socket的简单web应用

    import socket
    
    soc=socket.socket()
    soc.bind(('127.0.0.1',8001))
    soc.listen(5)
    
    while True: 
        print('监听8001端口')
        conn,addr=soc.accept()
    
        data=conn.recv(1024)
        # 转换成str类型
        data=str(data,encoding='utf-8')
        print(data)
        resquest_list=data.split('
    ')
        first_list=resquest_list[0].split(' ')
        conn.send(b'HTTP/1.1 200 OK
    Content-Type:text/html
    
    ')
        if first_list[1]=='/index':
            # conn.send('<h1>index</h1><img src="https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=775f519ac08065386fe7ac41f6b4ca21/fd039245d688d43f63d84526771ed21b0ff43bf5.jpg">'.encode('utf-8'))
            with open('index.html','rb')as f:
                data=f.read()
            conn.send(data)
        elif first_list[1]=='/two':
            with open('two.html','r',encoding='utf-8')as f:
                data=f.read()
            import datetime
            now=datetime.datetime.now().strftime('%Y-%m-%d %X')
            data=data.replace('@@time@@',now)
            conn.send(data.encode('utf-8'))
        else:
            conn.send(b'404')
    
    
        # print(data)
        #
        # conn.send(b'HTTP/1.1 200 OK 
    
    hello web')
        conn.close()
    
    '''
    # 请求首行:请求类型  请求地址  请求协议
    GET /index HTTP/1.1
    
    # 请求头
    Host: 127.0.0.1:8001
    
    Connection: keep-alive
    
    Cache-Control: max-age=0
    
    Upgrade-Insecure-Requests: 1
    
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
    
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    
    Accept-Encoding: gzip, deflate, br
    
    Accept-Language: zh-CN,zh;q=0.9
    
    '
    
    # 请求体
    。。。。
    
    '''
    MyWeb.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <img src="https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=775f519ac08065386fe7ac41f6b4ca21/fd039245d688d43f63d84526771ed21b0ff43bf5.jpg">'
    
    </body>
    </html>
    index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    @@time@@
    </body>
    </html>
    two.html

    分层的简单web框架

    from wsgiref.simple_server import make_server
    import my_urls
    from views import *
    
    
    def my_server(environ, start_response): #environ:请求头对象  start_response:发送响应头
        # print(environ)
        print(environ['PATH_INFO'])
        start_response('200 OK', [('Content-Type', 'text/html')])
        func=None
        for url in my_urls.urls:
            if url[0]==environ['PATH_INFO']:
                func=url[1]
                break
        if func:
            response=func(environ) #函数返回值
        else:
            response= error(environ)
    
        return [response,]
    
    
    if __name__ == '__main__':
    
        my=make_server('127.0.0.1',8002,my_server)
        my.serve_forever()
    wsgirefWeb.py
    view.py
    import views
    
    urls=[
        ('/index',views.index),
        ('/time',views.time),
        ('/user_list',views.user_list),
        ('/favicon.ico',views.favicon),
    ]
    my_urls.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <img src="https://gss0.bdstatic.com/-4o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=775f519ac08065386fe7ac41f6b4ca21/fd039245d688d43f63d84526771ed21b0ff43bf5.jpg">'
    
    </body>
    </html>
    index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    @@time@@
    </body>
    </html>
    two.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>用户列表</title>
    </head>
    <body>
        <table border="1">
            <thead>
            <tr>
                <th>id</th>
                <th>用户名</th>
                <th>密码</th>
            </tr>
            </thead>
            <tbody>
                {% for user in user_list%}
                <tr>
                    <td>{{user.id}}</td>
                    <td>{{user.name}}</td>
                    <td>{{user.password}}</td>
                </tr>
    
                {%endfor%}
            </tbody>
    
        </table>
    
    
    </body>
    </html>
    two.html

    二:http协议

    http协议特性:
    1 基于TCP/IP协议之上的应用层协议
    2 基于请求-响应模式
    3 无状态保存 自身不对请求和响应之间的通信状态进行保存 (cookie)
    4 无连接

    --------------------------------------
    http请求协议与响应协议

    --------------------------------------
    URL简介
    ?之前的是请求路径,?之后的是请求数据部分

    --------------------------------------

    请求首行:请求方式,请求地址,协议版本
    请求头:key:value
    请求体:post数据提交的部分


    三:django安装、创建、启动

    ps:长期支持版和非长期支持版     长期支持版:1.11和2.22

    安装模块:

    方式1 cmd 方式 

    pip3 install django==1.11

    方式2 pycharm

    pycharm settings

    方式3 pycharm

    pycharm terminal

     --------------------------------------

    ps:pycharm 默认使用国外的pip源 

    注意pip源管理,使用国内源

    方式一

    pip3 install django==1.11 -i  https://pypi.tuna.tsinghua.edu.cn/simple/

    方式二:

    pycharm settings project

     --------------------------------------

    ps:安装的django在pip3 解释器下

     --------------------------------------

    创建django项目 ps:哪个路径下创建

    django-admin.py startproject mysite

     --------------------------------------

    启动django   ps:在创建的项目下执行

    方式1 cmd下到项目目录下执行

    python manage.py runserver ip:port

    方式2 pycharm terminal下

    python manage.py runserver ip:port

    方式3 pycharm 右上角启动

     --------------------------------------

    虚拟环境

    cp 系统环境  

    隔离 互不影响 装的东西只有自己的工程下可以使用


    四:主流web框架总结

    a socket

    b 路由关系

    c 模板字符串替换(模板语言)

    主流web框架总结:

    django 

    a用别人的 b自己写的 c自己写的 

    flask

    a用别人的 b自己写的 c用别人的(jinja2)

    tornado

    a自己写的 b自己写的 c自己写的

  • 相关阅读:
    Magic-Club开发--第十六天
    (待完成)
    (转)Python多任务之线程
    (转)机器学习常用性能度量中的Accuracy、Precision、Recall、ROC、F score等都是些什么东西?
    排序
    一些c++<new(std::nothrow) >
    一些c++<省去警告>
    一些c++<MFC
    一些c++<auto>
    Unity3D js和C# 间相互调用
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9549257.html
Copyright © 2020-2023  润新知