zoukankan      html  css  js  c++  java
  • 初识web框架和Django框架

    1018 初识web框架和Django框架

    HTTP协议

    超文本传输协议

    服务端:24小时提供服务、有固定的ip、支持高并发

    1、四大特性

    1、基于TCP/IP之上作用于应用层

    2、基于请求响应

    3、无状态-不保存用户状态,所以才有了cookies、session、token

    4、无连接

    ​ 长连接:websocket(HTTP协议的大补丁)

    2、数据格式

    一般两个格式都一样

    1、请求格式

    请求首行(请求方式、协议版本...)
    请求头(一大堆k:v键值对)
              # 这里一定要换行,也可以写个
    
    请求体(真正的数据。发post请求的时候才会有,如果是get请求不会有)
    

    请求方式:

    • get请求:朝别人要数据(没有请求体,get请求也可以携带参数)
    • post请求:向别人提交数据(eg:用户登录)

    url: 统一资源定位符

    2、响应格式

    响应首行
    响应头
              # 这里一定要换行,也可以写个
    
    响应体
    

    3、响应状态码

    用特定的数字表示一些意思:

    • 1XX:服务端已经成功接收到了你的数据,正在处理,你可以继续提交其他数据
    • 2XX:服务端成功响应(200-请求成功)
    • 3XX:重定向(例如在一个网站,没有登录情况下点击一个功能,但是自动跳转到登录页面)
    • 4XX:请求错误(404-请求资源不存在、403-拒绝访问(资源存在,但是你不符合条件))
    • 5XX:服务器内部错误(500-服务器错误)

    纯手撸一个web框架

    简易版

    写一个服务端就行,然后在浏览器中访问127.0.0.1:8080就能在页面上显示hello baby了

    import socket
    server = socket.socket()
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    
    while True:
        conn, addr = server.accept()
        data = conn.recv(1024)
        print(data)
        conn.send(b'HTTP/1.1 200 OK
    
    hello baby~')
        conn.close()
    

    升级版

    可以用wsgiref模块来代替socket的处理和http协议的处理

    from wsgiref.simple_server import make_server
    # 用来对socket处理和http协议的处理
    
    def run(env, response):
        """
        :param response: 响应相关的所有数据
        :param env: 请求相关的所有数据
        :return:
        """
        response('200 OK', [])
        # print(env)
        current_path = env.get('PATH_INFO')
     	if current_path == '/index':
            return [b'index']
        elif current_path == '/login':
            return [b'login']
        else:
            retutn [b'404 error']
    
    
    if __name__ == '__main__':
        server = make_server('127.0.0.1', 8080, run)  # 实时监听该地址,只要有客户端来连接,统一交给run函数去处理
        server.serve_forever()  # 一直启动服务端
    
    

    动静态网页

    静态网页

    数据是写死的,万年不变

    动态网页

    数据是实时获取的

    例如:

    1. 后端获取当前时间展示到前端
    2. 后端获取数据库中的数据展示到前端

    jinja2模块-模板渲染

    后端获取的数据传递给html页面>>>>>>>模板的渲染

    jinja2模块专门用来模板渲染,把数据放到html页面上

    模板语法(极其贴近python后端语法):利用模板语法,实现后端传递数据给前端html页面

    可以让前端页面字典可以取值、还支持基础语法

    变量相关:用{{ }}

    <p>{{ user }}</p>
    <p>{{ user.name }}</p>
    <p>{{ user['pwd'] }}</p>
    <p>{{ user.get('hobby') }}</p>
    

    逻辑相关:用{% %} ,,eg:for循环

    <body>
        {% for i in user_list %}
        {% endfor %}
    </body>
    

    python三大主流web框架

    Django

    大而全,自带的功能特别特别多,类似于航空母舰,有时候过于笨重

    Flask

    小而精,自带的功能特别特别少,类似于游骑兵,但它的第三方的模块特别特别多,如果将flask第三方模块全部加起来,可以超过django,但是比较依赖于第三方模块,可能会出问题

    Tornado

    异步(任务提交的方式)非阻塞(软件运行状态),效率高,牛逼到可以开发游戏服务器

    web框架组成部分

    A:socket部分

    B:路由与视图函数对应关系

    C:模板语法

    对于三大框架来说

    Django:

    ​ A用的别人的,wsgiref 模块

    ​ B自己写的

    ​ C自己写的

    Flask:

    ​ A用的别人的,werkzeug(基于wsgiref)

    ​ B自己写的

    ​ C用的别人的,jinja2 模块

    Tornado:

    ​ 三个都是自己写的

    Django

    注意事项

    1、计算机的名称不能有中文

    2、一个pycharm窗口就是一个项目

    3、项目名里面尽量不要用中文

    django版本问题

    1.X 2.X 推荐使用1.11.9~1.11.13

    django安装

    pip3 install django==1.11.11

    一个django项目就类似于是一所大学,而app就类似于大学里面的学院
    django其实就是用来一个个应用的
    一个app就相当于一块独立的功能
    用户功能
    管理功能
    django支持任意多个app

    如何使用

    命令行使用:

    创建django项目:django-admin startproject mysite

    启动django项目:先进到mysite文件夹,然后 python manage.py runserver

    创建应用app:python manage.py startapp app01

    ​ 注意:新创建的app需要去settings配置文件中注册,pycharm只会帮你注册第一个你在创建项目的时候写的应用,再创建app一定要去settings配置文件的installed中添加app名。

    ​ 注意:使用命令行创建django项目,不会自动创建templates文件夹,需要自己创建,需要在settings文件中手动在TEMPLATES中的空列表中写配置,写上os.path.join(BASE_DIR, 'templates')

    pycharm使用:

    ​ New Project>>>Django>>>直接在第一栏里写项目名,然后第一个下拉框选第二个本机的,然后第二个下拉框直接写app名。

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

    项目名:

    ​ 跟项目名同名的文件夹

    ​ settings.py--暴露给用户的配置文件

    ​ urls.py--路由与视图函数的对应关系

    ​ 应用名

    ​ migrations文件夹--存放数据库迁移记录的

    ​ admin.py--django后台管理

    ​ apps.py--注册相关

    ​ models.py--模型类

    ​ tests.py--测试文件

    ​ views.py--存放视图函数

    ​ templates文件夹--模板文件夹,存放一大堆html文件

    ​ manage.py--django入口文件

  • 相关阅读:
    java 多线程 day01 创建线程
    mysql 时间处理函数
    导出excel
    mysql 从零学习
    java 读取xlsx
    跳出多重循环
    mysql 基础
    spark 快速入门 java API
    java 反序列化PHP
    完整mybatis应用
  • 原文地址:https://www.cnblogs.com/zhuangyl23/p/11710658.html
Copyright © 2011-2022 走看看