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自己写的

原文地址:https://www.cnblogs.com/xujinjin18/p/9549257.html