软件开发架构

1.c/s架构
2.b/s架构
# b/s本质也是c/s架构

后端:将前端与数据库链接在一起

HTTP协议

"""规定了浏览器与服务端之间数据交互的格式"""
# 1.四大特性
1.基于TCP、IP之上的作用于应用层的协议
   2.基于请求响应
   3.无状态
  见你千百遍我都当你如初见
      ps:cookie、session、token...
   4.无(短)连接
  ps:长连接:websocket  案例:即时通讯
# 2.数据格式
请求数据格式
  请求首行(请求方法...)
        请求头(一大堆K:V键值对)
  \r\n
        请求体(并不是所有的请求方法都有get没有,post有,主要用来携带敏感性数据)
    响应数据格式
  响应首行(响应状态码...)
        响应头(一大堆K:V键值对)
  \r\n
         响应体(展示给用户的数据)
# 3.响应状态码
用简单的数字来表示一串中文意思(http协议规定)
   1XX:服务端已经接受到你的数据正在处理,你可以继续提交
   2XX:200 OK>>>:请求成功
   3XX:重定向(原本想访问A但是内部跳到B)
   4XX:403当前请求不符合条件 404请求资源不存在
   5XX:服务器内部错误
  ps:除了上述统一的响应状态码之外,公司还可以自定义自己的状态码
# 4.业务状态码(一般规定一个正确的,只规定200是正确的,其他的全部为异常)
eg:
  1、用户名不存在
       2、验证码错误
      1)随机生成
           2)校验验证码
           存入验证码到数据库(MySQL),表结构
          id code phone create_time
                1    123456  110  2021-10-01 10:10:10
                2    123457  110  2021-10-01 11:10:10
                3    123458  110  2021-10-01 12:10:10
                       
                     通过表结构可以对一天当中的验证码输错次数做限制
                       
            redis也可以存
            如果一天当中,不限制发送次数,存到session中
 
       3、密码错误

       4、告诉前端用户名不存在,密码错误或验证码错误
       json.dumps({})
       # 当业务分模块的时候,定义code值,增加数字头,用来识别各个部门
       eg:
           crm11, 财务12, 销售13, 主站14
       def index()
           user_dic = {'code':121001, 'msg':'验证码错误', 'data':[]}
           user_dic = {'code':121002, 'msg':'用户名不存在', 'data':[]}
           user_dic = {'code':121003, 'msg':'密码错误', 'data':[]}