初识web框架和Django框架

目录

  • 1018 初识web框架和Django框架
  • HTTP协议
    • 1、四大特性
    • 2、数据格式
    • 3、响应状态码
  • 纯手撸一个web框架
    • 简易版
    • 升级版
  • 动静态网页
    • 静态网页
    • 动态网页
  • jinja2模块-模板渲染
  • python三大主流web框架
    • Django
    • Flask
    • Tornado
    • web框架组成部分
  • Django
    • 注意事项
    • django版本问题
    • django安装
    • 如何使用

1018 初识web框架和Django框架

HTTP协议

超文本传输协议

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

1、四大特性

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

2、基于请求响应

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

4、无连接

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

2、数据格式

一般两个格式都一样

1、请求格式

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

请求方式:

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

url: 统一资源定位符

2、响应格式

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

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\r\n\r\nhello 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页面

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

变量相关:用{{ }}

{{ user }}

{{ user.name }}

{{ user['pwd'] }}

{{ user.get('hobby') }}

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


    {% for i in user_list %}
    {% endfor %}

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入口文件

你可能感兴趣的:(初识web框架和Django框架)