zoukankan      html  css  js  c++  java
  • 美多商城项目(一)

    美多商城项目(一)
    1.在给用户授权的时候,用到了一个%,表示的是任何ip都可以连接这个数据库。换句话说,如果你换了电脑,你也是可以进行连接数据库继续开发的。

    grant all on meiduo_mall.* to 'meiduo'@'%';
    1.用户信息的存储
    用户表分析

    ID
    用户名
    密码
    手机号
    邮箱
    是否管理员is_admin
    是否注销is_delete
    想要生成表,需要定义一个模型类。Django里面不需要定义模型类了。

    Django的认证系统已经为我们提供了一个用户模型类,还提供了认证和授权功能。

    Django认证机制依赖于session机制,但我们使用JWT认证机制。

    is_staff是否可以访问admin站点,相当于之前我们用的is_admin
    is_superuser超级管理员
    系统的模型类中,缺少我们需要的一些字段,那么我们可以自定义用户模型类,采用继承就可以解决这个问题。在迁移之前,我们需要在配置文件中设置一下,否则,系统不知道我们定义了模型类。

    AUTH_USER_MODEL = '子应用.模型类'

    这里不是路径,只是一个格式,注意即可。

    AUTH_USER_MODEL = 'users.User'
    如果我们直接使用了系统的模型类,那么那张用户表叫做auth_users。

    2.设计接口的思路
    我们在接到了工作任务的时候,那么我们按照下面的思路来思考。

    业务功能:分析子业务(子功能),每个子业务设计一个API接口

    API设计过程:

    • 接口的请求方式,如GET 、POST 、PUT等
    • 接口的URL路径定义
    • 需要前端传递的数据及数据格式(如路径参数、查询字符串、请求体表单、JSON等)
    • 返回给前端的数据及数据格式
      2.1用户注册子业务
      1.获取短信验证码

    2.用户名是否存在

    3.手机号是否存在

    4.注册信息的保存

    四个子业务,那么设计四个API接口。

    2.1.1获取短信验证码
    API: GET /sms_codes//

    /sms_codes/?P1[3-9]d{9}/

    参数:
    通过url传递手机号
    响应:
    {
    "message":"OK"
    }
    补充功能:

    1.短信发送60s间隔限制(同一个手机在60之内只发一个短信验证码)

    2.redis管道的使用:

    可以向redis管道中添加多个redis命令,然后一次性进行执行(可以做到只连接一次redis,那么网站的效率会高一点。)

    2.1.2 异步发短信
    为什么使用:传统的方式造成用户长时间的等待

    解决:

    1.将发送短信的代码抽取成一个函数

    2.在短信发送API接口中创建一个进程调用发送短信函数。

    问题:

    1.如果客户端请求较多,就会造成服务器压力过大。

    我们可以使用稍后介绍的celery

    2.1.3Celery异步任务队列
    本质:通过提前创建的进程调用函数来实现异步的任务。

    创建的进程可以在不同的服务器上。

    概念:

    1.任务执行者( worker):提前创建的进程

    2.任务发出者:发出任务信息,让执行者去调用某个函数( 任务函数)

    3.中间人( broker):存放任务消息。

    特点:

    1.任务执行者的进程可以单独在其他电脑上进行创建。

    2.中间人又叫做任务队列,先添加到队列中的任务消息会先被worker所执行。

    3.生产者-消费者模型。

    注意:中间人可以是rabbit-mq,也可以是redis,我们使用redis。

    使用:

    1.安装

    pip install celery
    2.创建一个Celery类的对象并进行配置,是为了配置中间人的地址。

    main.py

    from celery import Celery

    创建Celery类的对象

    celery_app = Celery('demo')

    加载配置

    celery_app.config_from_object('配置文件的包路径')

    config.py

    设置中间人地址borker

    broker_url = 'redis://:/'

    broker_url = 'redis://127.0.0.1:6379/3'
    3.封装任务函数

    @celery_app.task(name='send_sms_code')
    def send_sms_code(a,b):
    # ...
    pass
    4.启动celery的worker( 创建工作的进程)

    celery -A 'celery_app对象所在文件包路径' worker -l <日志级别>
    日志级别:critial fatal、error、warn、info、debug

    5.发出任务消息

    send_sms_code.delay()
    2.2用户名是否存在
    获取用户名的数量。

    API:GET /usernames/(?Pw{5,20})/count/
    参数:
    通过url地址传递用户名
    响应:
    {
    "username":"用户名",
    "count":"数量"
    }
    2.3手机号是否存在
    获取手机号的数量。

    API: GET /mobiles/(?P1[3-9]d{9})/count/
    参数:
    通过url地址传递手机号
    响应:
    {
    "mobile": "手机号",
    "count": "数量"
    }
    3.通过域名访问网站
    静态文件服务器:127.0.0.1:8080 ---> www.ethanyan.site:8080

    后端API服务器:127.0.0.1:8000 -----> api.ethanyan.site:8000

    域名对应IP

    通过域名访问网站 --->DNS解析( 根据域名获取对应的ip)--->再访问ip对应的服务器。

    通过域名访问网站 --->先到本地 /etc/host文件中查找域名和ip对应关系,如果找到,直接根据ip访问对应的服务器,不再进行DNS解析,如果找不到,才会进行DNS解析过程。

    注意:如果想通过一个域名访问到Django网站服务器,需要将域名添加到 ALLOWED_HOSTS中。

    4.一些小的知识点
    1.日志的记录等级,常见四种大小关系是:

    DEBUG < INFO < WARNING < ERROR
    只有记录级别大于或者等于该级别的信息才会输出。

    5.跨域地址
    同源地址:对于两个url地址,如果协议,ip和端口完全一致,这样的地址就是同源地址,否则就不是同源地址。

    跨域请求:客户端发出请求时,如果源请求地址和被请求地址不是同源,这个请求就是跨域请求。

    源请求地址: http://www.ethanyan.site:8080/

    被请求地址: http://api.ethanyan.site:8000/

    浏览器在发起ajax跨域请求时,会有CORS跨域请求的限制

    在发起跨域请求时,在请求中携带一个请求头:

    Origin:源请求地址

    被请求的服务器在返回响应时,如果允许源地址对其进行跨域请求,需要在响应时携带一个响应头:

    Access-Control-Allow-Origin:源请求地址

    浏览器如果发现被请求的服务器在返回响应时,没有携带 Access-Control-Allow-Origin:源请求地址响应头,浏览器会直接将请求驳回,然后进行报错。

    ...
    CSRF跨站请求是不是跨域请求?

    答:是跨域请求。

    总结
    1.Django认证系统用户模型类

    class User(AbstractUser):
    mobile = models.CharField(max_length=11,verbose_name='手机号')
    ....
    AUTHUSERMODEL = 'users.User'

    2.接口设计思路

    分析子业务,每个子业务实现一个API接口

    a.请求方式和URL地址

    b.接口所需的参数和格式

    c.接口的响应数据和格式

    3.短信验证码获取

    基本业务逻辑

    a.随机生成6位数字作为短信验证码

    b.在redis中存储短信验证码内容,以 sms_为key,以验证码内容为value

    c.使用云通讯给手机号发送短信

    d.返回应答,短信发送成功

    补充两个功能:

    a.短信发送60s间隔限制

    b.redis管道的使用

    4.本地域名设置

    /etc/hosts
    5.跨域请求

    同源地址:协议,ip,port完全一致

    跨域请求:浏览器发请求时,如果源地址和被请求地址不是同源,这个请求就是跨域。

    浏览器针对Ajax跨域请求,有CORS跨域请求的限制。

    6.celery异步任务队列

    使用celery异步发送短信验证码,解决用户点击获取短信验证码之后,长时间等待。

    7.用户名和手机号是否存在

    获取用户名数量
    1.根据用户名查询数据库,获取查询结果数量
    2.返回用户名数量

  • 相关阅读:
    今天开始用 VSU 2010
    Visual Studio 2010 模型设计工具 基本应用
    Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
    Enterprise Library 4.1 Security Block 快速使用图文笔记
    解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”(图)
    一个Oracle存储过程示例
    Enterprise Library 4.1 Application Settings 快速使用图文笔记
    Oracle 10g for Windows 简体中文版的安装过程
    Oracle 11g for Windows 简体中文版的安装过程
    Oracle 9i 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)
  • 原文地址:https://www.cnblogs.com/nbzyf/p/12088103.html
Copyright © 2011-2022 走看看