Django学习日记-01web框架的本质

对于web框架需要掌握的知识至少有 - socket -http协议 - HTML知识 -数据库(pymysql, sqlalchemy)

HTTP:

      无状态   短链接   包含get和post 两种发送请求方法 

    GET和POST没有实质上的区别,两种方法本质上都是基于TCP/IP的关于数据在应用层中如何通信的协议

  也就是说GET和POST能做的事情一样,但是http规定get请求放在头部URL, post请求主要放在bodys里

socket:   tcp的三次握手

    对于服务端(自己学习充当)

      1 建立自己的IP和端口同时监听(127.0.0.1, 8080)     

      3收到hello

      4响应“yes”

      6.连接断开

    对于客户端(博客园)

       2.通过DNS收到ip和端口,发送数据“hello”

       5.接收

过程:

    a。socket服务端

    b。根据URL不同返回不同的内容

            -提取客户端信息

            -routers系统:

                URL-》函数

     c。字符串返回给用户

            -模板引擎渲染:

                HTML充当模板  

            -利用函数返回字符串

代码:理解过程

import socket
def f1():
return b'1212112'
def f2():
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='day6')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute("select id,name,email from t1")
user_list = cursor.fetchall()
cursor.close()
conn.close

content_list = []
for row in user_list:
tp = "<tr><td>%s</td><td>%s</td><td>%s</td></tr>"%(row['id'],row['name'],row['email'])
content_list.append(tp)
content = "".join(content_list)

f = open('1.html','r',encoding='utf-8')
template = f.read()
f.close()

data = template.replace('@@qqqq@@',content)
return bytes(data, encoding='utf-8')

def f3():
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='day6')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute("select id,name,email from t1")
user_list = cursor.fetchall()
cursor.close()
conn.close

f = open('1.html', 'r', encoding='utf-8')
template = f.read()
f.close()


routers = [
('/1212',f1),
('/shuju',f2),
('/shuju2',f3)
]

def:run():

  sock = socket.socket()

  sock.bind(('127.0.0.1', 8080))

  sock.listen(5)

  while  True :

    conn,  addr = sock.accept()

    data = conn.recv(8098)

    data = str(data, encoding="uft-8")

    headers , bodys =data.split(' ')

    temp_list = headers.split(' ')

    methoe , url, protocal = temp_list[0].split(' ')

    conn.send(b'HTTP/1.1 200 OK ')

    func_name = None

    for item in routers :

      if item[0] = = url:

        func_name = item[1]

        break

    if func_name:

      response = func_name()

    else:

      response = b'404'

    conn.send(response)

    conn.close()

if __name__ == '__main__':

  run()

4  web框架:   

    框架种类:

         -a,b,c                      --> Tornado

        - 【第三方 a】,b,c  - -> wsgiref  -> Django   

        - [第三方  a],b,[第三方 c] ---> flask

    分类:

         -Django框架(重量级)

         -其他

5. Django框架
pip3 install django

命令:
# 创建Django程序
django-admin startproject mysite
# 进入程序目录
cd mysite
# 启动socket服务端,等待用户发送请求
python manage.py runserver 127.0.0.1:8080

pycharm:
...

Django程序目录:
mysite
mysite
- settings.py # Django配置文件
- url.py # 路由系统:url->函数
- wsgi.py # 用于定义Django用socket, wsgiref,uwsgi

# 对当前Django程序所有操作可以基于 python manage.py runserver
manage.py


1. 创建project
2. 配置:
- 模板路径
template目录

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'template')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
- 静态文件路径
static目录

STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)

3. 额外配置
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]