zoukankan      html  css  js  c++  java
  • 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',
    ]



  • 相关阅读:
    11.3 校内模拟赛
    11.2 模拟赛题解报告
    11.1 校内模拟赛题解报告
    CF710E Generate a String
    CF165E Compatible Numbers
    CF1092F Tree with Maximum Cost
    2021,10,29 模拟赛题解报告
    LCT学习笔记
    FFT 快速傅里叶变换学习笔记
    拉格朗日插值学习笔记
  • 原文地址:https://www.cnblogs.com/kangkang1999/p/13267681.html
Copyright © 2011-2022 走看看