今日内容回顾(django入门)

今日内容回顾

django框架入门

推导流程之手撸web框架

web框架可以简单的理解为是基于互联网的web服务端>>>:socket服务端

  1. scoket服务端代码

  2. HTTP协议

  3. 根据网址后缀的不同请求不同的内容

  4. 请求方式

    GET请求:朝服务端索要数据

    POST请求:朝服务端提交数据

  5. 从请求数据格式中筛选出用户输入的网址后缀

    t_g = data.decode('utf8').split(" ")[1]
    
  6. 代码的缺陷

    socket代码重复编写造轮子

    针对请求数据格式的处理复杂且重复

    针对不同网址后缀的匹配方式过于lowB

import socket

server = socket.socket()
server.bind(("127.0.0.1", 8000))
server.listen(5)

while True:
    sock, addr = server.accept()
    sock.send(b'HTTP/ 1.1 200 OK \r\n\r\n')
    data = sock.recv(1024)
    t_g = data.decode('utf8').split(" ")[1]
    if t_g == '/index':
        sock.send(b'I,m index')
    else:
        sock.send(b'404 ')

推导流程之基于wsgiref模块撸

wsgiref内部封装了 socket代码和请求数据的处理

from wsgiref.simple_server import make_server

def run(request, response):
    """
    :param request: 请求数据
    :param response: 响应数据
    :return: 返回给客户端的数据
    """
    print(request)  # 自动将请求数据全部处理成字典K:V键值对形式
    response("200 OK", [])  # 固定代码
    return [b"hello my name is wsgiref"]  # 返回给客服端的数据,也可以是是Html文件


if __name__ == '__main__':
    """
    调用wsgiref中的make_server 里面写入参数 IP地址、端口、方法
    任何访问下列IP+端口的请求都会给第三个参数加括号调用
    """ 
    server = make_server("127.0.01", 8080, run)
    server.serve_forever()  # 永久启动

上述使用wsgiref模块解决了俩个问题

替代了socket代码重复编写造轮子,针对请求数据格式的处理复杂且重复

那么针对不同的网址后缀返回不同的内容,我们可以考虑将其封装成函数

 def index(request):
            return 'index'
        def login(request):
            return 'login'
        def register(request):
            return 'register'
        def error(request):
            return '404 error'
        urls = (
            ('/index', index),
            ('/login', login),
            ('/register', register),
         )	

然后使用软件开发目录规范将其根据py文件的功能不同划分到不同的py文件

urls.py		存放对应关系
views.py	存放功能函数
start.py	启动文件
templates	存储html文件

推导流程之动静态网页讲解

  • 动态网页

    动态网页指的是网页上的数据不是全部写死,有些是动态获取的如后端传入

  • 静态网页

    静态网页指页面上的数据直接写死的,固定不变的,想要改变只能修改源码。

推导流程之jinja2模块

jinja2模块能够让我们在html文件内使用类似于后端的语法来操作各种数据类型

首先jinja2模块属于第三方模块需要下载 pip3 install jinja2

from jinja2 import Template
def get_dict(request):
    user_dict = {'name': 'jason', 'pwd': 123, 'hobby': ['read', 'run', 'music']}
    with open(r'templates/myhtml04.html','r',encoding='utf8') as f:
        data = f.read()
    temp = Template(data)
    res = temp.render(data=user_dict)  # 将字典传递给html页面 页面上通过data即可获取(data仅仅是一个变量名)
    return res
模板语法
<h1>{{ data }}</h1>
<h1>{{ data['name'] }}</h1>
<h1>{{ data.get('pwd') }}</h1>
<h1>{{ data.hobby }}</h1> 

{% for user in user_data %}
    <tr>
        <td>{{ user.id }}</td>
        <td>{{ user.name }}</td>
        <td>{{ user.age }}</td>
    </tr>
{% endfor %}

python主流web框架

  • django框架

    特点:大而全,自身携带的功能非常的多,类似于航空母舰

    缺陷:开发小项目的时候使用该框架有点笨重(大材小用)

    socket部分用的是别人的 wsgiref模块

    路由层与视图层用的是自己的 自己写的

    模板语法 用的自己的(虽然没有jinja2好用,但是也很方便)

  • flask框架

    特点:小而精 自带的功能非常的少,类似于特种兵

    第三方的模块特别多,如果将flask的第三方模块加起来可能胜过django

    缺陷:比较依赖第三方模块

    socket部分用的是别人的 werkzeug(其内部也是wsgiref模块)

    路由层与视图层用的是自己的 自己写的

    模板语法 用的别人的 jinja2模块

  • tornado

    特点:异步非阻塞 该框架快到可以作为游戏服务器

    缺陷:上手难度是三者最高

    其socket部分、路由层与视图层、模板语法都是自己写的非常牛掰。

fastapi框架

sanic框架

django框架介绍

  1. 版本问题

    1xx:同步 如1.11

    2xx:同步 如2.2

    3xx:异步 如3.2

    使用什么版本都行,区别不大。

  2. 启动注意事项

    在启动django项目的时候 一定要确保一个端口只有一个项目

    计算机名称尽量不要有中文

    项目中所有的py文件名尽量不要使用中文

    不同版本的python解释器配合不同版本的django会有一些报错

    仔细查找一下报错信息里面会提示你是那个py文件里面的代码出错

    比如:widgets.py 的152行报错 把152有个逗号删除即可

  3. 一个pycharm窗口只允许有一个项目,不要做项目的嵌套

  4. 验证django是否下载成功

    cmd终端输入 django-admin

    在pycharm里面下载的默认的是c盘可能没有设置环境变量上述是无法直接验证到的

    需要添加环境变量。

django基本操作命令

命令行操作
  1. 创建django项目

    选择创建在那个盘中,要先切到那个盘的目录下

    如: D:

    django-admin startproject 项目名

  2. 启动django项目

    启动时先切到项目目录下,如 cd/项目名,然后输入命令

    python38 manage.py runserver IP:port

    默认ip+port:http://127.0.0.1:8000 本机

  3. 访问django服务端,浏览器输入ip:port直接访问即可

  4. 创建app应用

    django框架类似于搭建了一个空壳子,给你提供所需的资源,

    至于到底要写哪些功能,需要通过创建app来划分

    eg:django初始项目可以看成是一所大学

    里面的app文件夹相当于是大学的各个学员

    创建app命令行输入:python38 manage.py startapp 应用名

pycharm操作
  1. pycharm中找到左上角的file点开,找到new project。

  2. 点击django,根据下图选择操作即可。

  3. 启动django项目直接点击pycharm上面的绿色小箭头即可

命令行与pycharm操作的区别

  1. 命令行不会自动创建templates文件夹

  2. 命令行不会配置文件编写关于templates文件夹的配置

    'DIRS': [os.path.join(BASE_DIR, 'templates')]

  3. pycharm自动创建的以一个应用会自动注册到配置文件中

  4. 针对db.sqlite3文件不用在乎它有没有创建,只要允许了django会自动出来

django目录结构

django项目目录
  • 与项目同名的文件夹

    __ init __.py 很少使用到,主要存储一些冷门配置

    settings.py 存储项目的配置文件

    urls.py 存储对应关系,路由层

    wsgl.py django服务,基本不用

    manage.py django入口文件

    templates文件夹 存储项目所需的html文件

  • 应用名文件夹(可以有很多)

    migrations文件夹 orm相关(数据库打交道的记录)

    __ init __.py 很少用,主要做一些冷门配置

    admin.py django自带的后台管理

    apps.py 创建应用之后用于应用的注册

    models.py 存储与数据库表相关的类

    tests.py 自带的测试文件

    views.py 存储业务相关的逻辑代码(函数、类)

    db.sqlite.3 自带的小型数据库

urls.py 路由层
views.py 视图层
templates 模板层
models.py 模型层

django小白入门必会三板斧

HttpResponse(主要用于直接返回字符串类型的数据)

render(主要用于返回html页面,斌且支持模板语法)

redirect(主要用于重定向)

posted @ 2022-08-30 19:14  瓮小辉  阅读(30)  评论(0)    收藏  举报