自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 收藏
  • 关注

原创 Django用户中心之添加和验证邮箱-添加邮箱后端逻辑(添加邮箱接口设计和定义、添加邮箱后端逻辑实现、判断用户是否登录并返回JSON)

添加邮箱接口设计和定义请求方式选项方案请求方法PUT请求地址/emails/请求参数参数名类型是否必传说明emailstring是邮箱响应结果:JSON字段说明code状态码errmsg错误信息添加邮箱后端逻辑实现class EmailView(View): """添加邮箱""" def put(self, request): """实现添加邮箱逻辑"""

2020-08-25 18:50:24 400 1

原创 Django用户中心之用户基本信息(用户基本信息逻辑分析、查询并渲染用户基本信息)

用户基本信息逻辑分析以下是要实现的后端逻辑用户模型补充email_active字段查询并渲染用户基本信息添加邮箱发送邮箱验证邮件验证邮箱查询并渲染用户基本信息用户模型补充email_active字段由于在渲染用户基本信息时,需要渲染用户邮箱验证的状态,所以需要给用户模型补充email_active字段补充完字段后,需要进行迁移。python manage.py makemigrationspython manage.py migrate查询用户基本信息class Use

2020-08-25 18:42:25 517

原创 DjangoQQ登录之openid绑定用户实现

类似于用户注册的业务逻辑当用户输入的手机号对应的用户已存在直接将该已存在用户跟openid绑定当用户输入的手机号对应的用户不存在新建一个用户,并跟openid绑定class QQAuthUserView(View): """用户扫码登录的回调处理""" def get(self, request): """Oauth2.0认证""" ...... def post(self, request): """美多商城用户绑定到o

2020-08-25 18:38:40 362

原创 DjangoQQ登录之openid是否绑定用户的处理(判断openid是否绑定过用户、openid已绑定用户的处理、openid未绑定用户的处理、补充itsdangerous的使用)

判断openid是否绑定过用户使用openid查询该QQ用户是否在商城中绑定过用户。try: oauth_user = OAuthQQUser.objects.get(openid=openid)except OAuthQQUser.DoesNotExist: # 如果openid没绑定美多商城用户 passelse: # 如果openid已绑定美多商城用户 pass判openid已绑定用户的处理如果openid已绑定美多商城用户,直接生成状态保持信息.

2020-08-25 18:36:24 622

原创 DjangoQQ登录之OAuth2.0认证获取openid(获取QQ登录扫码页面、接收Authorization Code、OAuth2.0认证获取openid、本机绑定www.meiduo.sit)

待处理业务逻辑# 提取code请求参数# 使用code向QQ服务器请求access_token# 使用access_token向QQ服务器请求openid# 使用openid查询该QQ用户是否在美多商城中绑定过用户# 如果openid已绑定美多商城用户,直接生成JWT token,并返回# 如果openid没绑定美多商城用户,创建用户并绑定到openid获取QQ登录扫码页面请求方式|选项 |方案 ||:–|:–||请求方法 |GET ||请求地址 |/qq/login

2020-08-24 19:53:11 526

原创 DjangoQQ登录之定义QQ登录工具QQLoginTool(QQLoginTool介绍、QQLoginTool安装、QQLoginTool使用说明)

QQLoginTool介绍该工具封装了QQ登录时对接QQ互联接口的请求操作。可用于快速实现QQ登录。QQLoginTool安装pip install QQLoginToolQQLoginTool使用说明1.导入from QQLoginTool.QQtool import OAuthQQ2.初始化OAuthQQ对象oauth = OAuthQQ(client_id=settings.QQ_CLIENT_ID, client_secret=settings.QQ_CLIENT_SECRE

2020-08-24 19:38:20 557

原创 DjangoQQ登录之定义QQ登录模型类(定义模型类基类、定义QQ登录模型类、迁移QQ登录模型类)

QQ登录成功后,我们需要将QQ用户和商场用户关联到一起,方便下次QQ登录时使用,所以我们选择使用MySQL数据库进行存储。定义模型类基类为了给项目中模型类补充数据创建时间和更新时间两个字段,我们需要定义模型类基类。 在meiduo_mall.utils/models.py文件中创建模型类基类。from django.db import modelsclass BaseModel(models.Model): """为模型类补充字段""" create_time = models.Da

2020-08-24 19:35:26 184

原创 DjangoQQ登录之QQ登录开发文档(QQ互联开发者申请步骤、QQ互联应用申请步骤、网站对接QQ登录步骤、QQ登录流程分析)

QQ登录:即我们所说的第三方登录,是指用户可以不在本项目中输入密码,而直接通过第三方的验证,成功登录本项目。QQ互联开发者申请步骤若想实现QQ登录,需要成为QQ互联的开发者,审核通过才可实现。相关连接: http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85QQ互联应用申请步骤成为QQ互联开发者后,还需创建应用,即获取本项目对应与QQ互联的应用ID。相关连接:http://wiki.connect.q

2020-08-24 15:12:10 188

原创 Django账号登陆之判断用户是否登录(展示用户中心界面、`is_authenticate` 判断用户是否登录、 `login_required装饰器` 判断用户是否登录、登录时next参数的使用)

展示用户中心界面class UserInfoView(View): """用户中心""" def get(self, request): """提供个人信息界面""" return render(request, 'user_center_info.html')需求:当用户登录后,才能访问用户中心。如果用户未登录,就不允许访问用户中心,将用户引导到登录界面。实现方案:需要判断用户是否登录。根据是否登录的结果,决定用户是否可以访问用户中心。

2020-08-24 15:05:33 1358

原创 Django账号登陆之退出登录(logout()方法介绍、logout()方法使用)

logout()方法介绍退出登录:a) 回顾登录:将通过认证的用户的唯一标识信息,写入到当前session会话中b)退出登录:正好和登录相反(清理session会话信息)logout()方法:a) Django用户认证系统提供了logout()方法b) 封装了清理session的操作,帮助我们快速实现登出一个用户logout()位置: - django.contrib.auth.__init__.py文件中logout()方法使用class LogoutView(View):

2020-08-24 14:50:16 4334

原创 Django账号登陆之首页用户名展示(首页用户名展示方案、用户名写入到cookie、Vue渲染首页用户名)

首页用户名展示方案方案一模板中 request 变量直接渲染用户名缺点:不方便做首页静态化{% if user.is_authenticated %} <div class="login_btn fl"> 欢迎您:<em>{{ user.username }}</em> <span>|</span> <a href="#">退出</a> </d

2020-08-24 14:42:29 2264

原创 Django账号登陆之多账号登录(自定义用户认证后端、配置自定义用户认证后端)

Django自带的用户认证后端默认是使用用户名实现用户认证的。用户认证后端位置:django.contrib.auth.backends.ModelBackend。如果想实现用户名和手机号都可以认证用户,就需要自定义用户认证后端。自定义用户认证后端步骤在users应用中新建utils.py文件新建类,继承自ModelBackend重写认证authenticate()方法分别使用用户名和手机号查询用户返回查询到的用户实例自定义用户认证后端users.utils.pyfrom djan.

2020-08-24 14:37:59 992 1

原创 Django账号登陆之用户名登录(逻辑分析、接口设计、接口定义、后端逻辑)

用户名登录逻辑分析用户名登录接口设计请求方式选项方案请求方法POST请求地址/login/请求参数:表单参数名方案是否必传说明usernamestring是用户名passwordstring是密码rememberedstring否是否记住用户响应结果:HTML字段说明登录失败响应错误提示登录成功重定向到首页用户名登录接口定义class LoginView(View

2020-08-24 14:34:32 601

原创 Django验证码*短信验证码之6-避免频繁发送短信验证码(避免频繁发送短信验证码逻辑分析、避免频繁发送短信验证码逻辑实现)

存在的问题:虽然我们在前端界面做了60秒倒计时功能。但是恶意用户可以绕过前端界面向后端频繁请求短信验证码。解决办法:在后端也要限制用户请求短信验证码的频率。60秒内只允许一次请求短信验证码。在Redis数据库中缓存一个数值,有效期设置为60秒。避免频繁发送短信验证码逻辑分析避免频繁发送短信验证码逻辑实现提取、校验send_flagsend_flag = redis_conn.get('send_flag_%s' % mobile)if send_flag: return

2020-08-21 09:49:55 533

原创 Django验证码*异步方案Celery之生产者消费者设计模式(生产者消费者设计模式介绍)

问题:我们的代码是自上而下同步执行的。发送短信是耗时的操作。如果短信被阻塞住,用户响应将会延迟。响应延迟会造成用户界面的倒计时延迟。解决:异步发送短信发送短信和响应分开执行,将发送短信从主业务中解耦出来。生产者消费者设计模式介绍为了将发送短信从主业务中解耦出来,我们引入生产者消费者设计模式。它是最常用的解耦方式之一,寻找中间人(broker)搭桥,保证两个业务没有直接关联。总结:生产者生成消息,缓存到消息队列中,消费者读取消息队列中的消息并执行。由商城生成发送短信消息

2020-08-21 09:49:44 190

原创 Django验证码*异步方案Celery之Celery介绍和使用(Celery介绍、创建Celery实例并加载配置、加载Celery配置、定义发送短信任务、启动Celery服务、调用发送短信任务)

消费者取到消息之后,要消费掉(执行任务),需要我们去实现。任务可能出现高并发的情况,需要补充多任务的方式执行。耗时任务很多种,每种耗时任务编写的生产者和消费者代码有重复。取到的消息什么时候执行,以什么样的方式执行。结论:实际开发中,我们可以借助成熟的工具Celery来完成。有了Celery,我们在使用生产者消费者模式时,只需要关注任务本身,极大的简化了程序员的开发流程。Celery介绍Celery介绍一个简单、灵活且可靠、处理大量消息的分布式系统,可以在一台或者多台机器上运行。单.

2020-08-21 09:49:33 211

转载 Django验证码*短信验证码之7-pipeline操作Redis数据库(pipeline操作Redis数据库)

Redis的 C - S 架构:基于客户端-服务端模型以及请求/响应协议的TCP服务。客户端向服务端发送一个查询请求,并监听Socket返回。通常是以阻塞模式,等待服务端响应。服务端处理命令,并将结果返回给客户端。存在的问题:如果Redis服务端需要同时处理多个请求,加上网络延迟,那么服务端利用率不高,效率降低。解决的办法:管道pipelinepipeline的介绍管道pipeline可以一次性发送多条命令并在执行完后一次性将结果返回。pipeline通过减少客户端与Redis

2020-08-21 09:49:18 110

原创 Django验证码*短信验证码之5-补充注册时短信验证逻辑(补充注册时短信验证后端逻辑、补充注册时短信验证前端逻辑)

补充注册时短信验证后端逻辑接收短信验证码参数sms_code_client = request.POST.get('sms_code')在forms表单中添加验证sms_code = forms.CharField(max_length=6, min_length=6, required=True)保存注册数据之前,对比短信验证码redis_conn = get_redis_connection('verify_code')sms_code_server = redis_conn.get(

2020-08-20 15:48:49 190

原创 Django验证码*短信验证码之4-短信验证码前端逻辑(Vue绑定短信验证码界面、axios请求短信验证码)

Vue绑定短信验证码界面register.html<li> <label>短信验证码:</label> <input type="text" v-model="sms_code" @blur="check_sms_code" name="sms_code" id="msg_code" class="msg_input"> <a @click="send_sms_code" class="get_msg_code">[[

2020-08-20 15:42:18 164

原创 Django验证码*短信验证码之3-短信验证码后端逻辑(短信验证码接口设计、短信验证码接口定义、短信验证码后端逻辑实现)

短信验证码接口设计请求方式选项请求方法GET请求地址/sms_codes/(?P1[3-9]\d{9})/请求参数:路径参数和查询字符串参数名类型是否必传说明mobilestring是手机号image_codestring是图形验证码uuidstring是唯一编号响应结果:JSON字段说明code状态码errmsg错误信息短信验证码接口定义class SMSCodeV

2020-08-20 15:38:11 174

原创 Django验证码*短信验证码之2-容联云通讯短信平台(联云通讯短信平台介绍、容联云通讯Python SDK、封装发送短信单例类)

容联云通讯短信平台介绍容联云通讯网址:https://www.yuntongxun.com/容联云管理控制台容联云创建应用容联云通讯Python SDKhttps://doc.yuntongxun.com/p/5f029ae7a80948a1006e776efrom ronglian_sms_sdk import SmsSDK accId = '容联云通讯分配的主账号ID'accToken = '容联云通讯分配的主账号TOKEN'appId = '容联云通讯分配的应用ID' de

2020-08-20 15:22:19 607

原创 Django验证码*短信验证码之1-短信验证码逻辑分析

短信验证码逻辑分析总结保存短信验证码是为注册做准备的。为了避免用户使用图形验证码恶意测试,后端提取了图形验证码后,立即删除图形验证码。Django不具备发送短信的功能,所以我们借助第三方的容联云通讯短信平台来帮助我们发送短信验证码。...

2020-08-20 15:17:52 128

原创 Django验证码之4-图形验证码前端逻辑(Vue实现图形验证码展示、Vue实现图形验证码校验)

Vue实现图形验证码展示register.jsmounted(){ // 生成图形验证码 this.generate_image_code();},methods: { // 生成图形验证码 generate_image_code(){ // 生成UUID。generateUUID() : 封装在common.js文件中,需要提前引入 this.uuid = generateUUID(); // 拼接图形验证码请求地址

2020-08-20 15:15:56 282

原创 Django验证码之3-图形验证码后端逻辑(准备captcha扩展包、准备Redis数据库、图形验证码后端逻辑实现)

准备captcha扩展包captcha扩展包用于后端生成图形验证码准备Redis数据库准备Redis的2号库存储验证码数据"verify_code": { # 验证码 "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/2", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient

2020-08-20 15:13:00 224

原创 Django验证码之2-图形验证码接口设计和定义(图形验证码接口设计、图形验证码接口定义)

图形验证码接口设计请求方式选项方案请求方法GET请求地址image_codes/(?P[\w-]+)/请求参数:路径参数参数名类型是否必传说明uuidstring是唯一编号响应结果图形验证码接口定义图形验证码视图class ImageCodeView(View): """图形验证码""" def get(self, request, uuid): """ :param req

2020-08-20 15:09:31 123

原创 Django验证码之1-图形验证码逻辑分析

图形验证码逻辑分析新建应用verifications将图形验证码的文字信息保存到Redis数据库,为短信验证码做准备。UUID 用于唯一区分该图形验证码属于哪个用户,也可使用其他唯一标识信息来实现。...

2020-08-20 15:03:54 182

原创 Django用户注册之3-用户注册业务实现(业务逻辑分析、接口设计和定义、前端逻辑、后端逻辑、状态保持、用户名重复注册)

用户注册业务逻辑分析用户注册接口设计和定义设计接口基本思路对于接口的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接口。设计接口的思路:分析要实现的业务逻辑:明确在这个业务中涉及到几个相关子业务。将每个子业务当做一个接口来设计。分析接口的功能任务,明确接口的访问方式与返回数据:请求方法(如GET、POST、PUT、DELETE等)。请求地址。请求参数(如路径参数、查询字符串、表单、JSON等)。响应数据(如HTML、JSON等)。用户注册接口设计请求方式选项

2020-08-20 14:52:31 513

原创 Django用户注册之2-用户模型类(Django默认用户认证系统、Django默认用户模型类、自定义用户模型类)

jango默认用户认证系统Django自带用户认证系统它处理用户账号、组、权限以及基于cookie的用户会话。Django认证系统位置django.contrib.auth包含认证框架的核心和默认的模型。django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。Django认证系统同时处理认证和授权认证:验证一个用户是否它声称的那个人,可用于账号登录。授权:授权决定一个通过了认证的用户被允许做什么。Django认证系统包含的内容用户

2020-08-19 15:16:08 320

原创 Django用户注册之1-展示用户注册页面(创建用户模块子应用、注册用户模块子应用、追加导包路径、展示用户注册页面)

创建用户模块子应用准备apps包,用于管理所有应用在apps包下创建应用userspython ../../manage.py startapp users注册用户模块子应用INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.m

2020-08-19 15:06:31 237

原创 Django项目准备之2-工程创建和配置(准备工作、配置开发环境、配置MySQL数据库、配置Redis数据库、配置工程日志、配置前端静态文件)

准备工作创建商城虚拟环境pipenv shell安装Django框架pip install django==2.2创建美多商城Django工程django-admin startproject lgshop配置开发环境项目的环境分为开发环境和生产环境。开发环境:用于编写和调试项目代码。生产环境:用于项目线上部署运行。新建配置文件准备配置文件目录准备开发环境配置内容指定开发环境配置文件配置MySQL数据库配置数据库DATABASES = { 'defa

2020-08-19 14:59:06 144

原创 Django项目准备之1-项目介绍(项目开发模式、项目运行机制)

项目开发模式选项技术选型开发模式前后端不分离后端框架Django前端框架Vue.js说明前后端不分离的开发模式,是为了提高搜索引擎排名,即SEO。特别是首页,详情页和列表页。页面需要局部刷新:我们会选择使用Vue.js来实现。项目运行机制...

2020-08-19 14:45:26 200

原创 Django项目准备之1-项目介绍(项目主要页面介绍、项目架构设计)

项目需求分析需求分析原因:可以整体的了解项目的业务流程和主要的业务需求。项目中,需求驱动开发。即开发人员需要以需求为目标来实现业务逻辑。需求分析方式:企业中,借助 产品原型图 分析需求。需求分析完后,前端按照产品原型图开发前端页面,后端开发对应的业务及响应处理。需求分析内容:页面及其业务流程和业务逻辑。我们现在借助 示例网站 作为原型图来分析需求。1. 项目主要页面介绍2. 归纳项目主要模块为了方便项目管理及多人协同开发,我们根据需求将功能划分为不同的模块。将来在项目中,

2020-08-19 14:37:02 198

原创 MySQL操作规范(命名规范、设计规范、SQL语句规范、行为规范)

命名规范表名建议使用有业务意义的英文词汇,必要时可加数字和下划线,并以英文字母开头库、表、字段全部采用小写MySQL 在 Linux 下默认是区分大小写的,而在 Windows 下不区分大小写。因此,防止出现问题,建议都设置为小写。避免用 MySQL 的保留字命名(包括表名、列名)禁止超过 30 个字符临时库、表名必须以 tmp 为前缀,并以日期为后缀,如:tmp_shop_info_20190404备份库、表必须以 bak 为前缀,并以日期为后缀,如:bak_shop_info_20190

2020-08-07 22:41:37 149

原创 MySQL之分区表(分区表的特点、分区键、分区类型、RANGE分区、HASH分区、LIST分区、如何选择合适的分区方式、修改分区-添加分区、分区删除、使用分区表的注意事项)

分区表的特点在逻辑上为一个表,在物理上存储在多个文件中create table `login_log`( login_id int(10) unsigned not null comment '登录用户id', login_time timestamp not null default current_timestamp, login_ip int(10) unsigned not null comment '登录类型')engine=innodb default charse

2020-08-07 22:35:53 872

原创 Mysql之主从复制(三步骤、基本原则、一主一从常见配置、测试是否配置成功)

复制的基本原理复制的三步骤1.master将改变记录到二进制日志。这些记录过程叫做二进制日志事件,binary log events2.slave将master的binary log events拷贝到它的中继日志3.slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行的复制的基本原则1.每个slave只有一个master2.每个slave只能有一个唯一的服务器ID3.每个master可以有多个salve一主一从常见配置MySQL版本一致且

2020-08-06 19:05:41 173

原创 Mysql之数据库锁(表锁(偏读)、表锁案例、表锁总结、行锁(偏写)、行锁案例、如何分析行锁定、什么是间隙锁、间隙锁的危害、如何锁定一行)

表锁行锁间隙锁锁是计算机协调多个进程或线程并发访问某一资源的机制表锁(偏读)偏向MyISAM存储引擎,开销小,加锁快;无死锁,锁定粒度大,发送锁冲突的概率最高,并发度低表锁案例建表create table mylock( id int not null primary key auto_increment, name varchar(20))engine myisam;插入数据insert into mylock(name) values('a');insert.

2020-08-06 18:57:49 236

原创 Mysql之分页查询优化(分析两种情况的分页查询、 根据自增且连续主键排序的分页查询、查询根据非主键字段排序的分页查询)

很多时候,业务上会有分页操作的需求,对应的 SQL 类似下面这条:select a,b,c from t1 limit 10000,10;表示从表 t1 中取出从 10001 行开始的 10 行记录。看似只查询了 10 条记录,实际这条 SQL 是先读取 10010 条记录,然后抛弃前 10000 条记录,然后读到后面 10 条想要的数据。因此要查询一张大表比较靠后的数据,执行效率是非常低的。分析两种情况的分页查询根据自增且连续主键排序的分页查询查询根据非主键字段排序的分页查询根据自增且连

2020-08-06 18:44:23 1729 1

原创 Mysql之trace(永远小表驱动大表、order by优化、order by使用index方式排序、Filesort 双路排序和单路排序、提高order by的速度)

永远小表驱动大表for i in range(5): for j in range(1000): passfor i in range(1000): for j in range(5): passorder by优化order by子句,尽量使用index方式排序,避免使用filesort方式排序建表,插入测试数据create table tbla( age int, birth timestamp not null);

2020-08-06 18:27:37 247

原创 Mysql之trace分析SQL优化器(trace分析SQL优化器介绍、使用 trace 进行分析、查看trace分析结果、总结)

建表CREATE TABLE `test_trace` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `a` INT(11) DEFAULT NULL, `b` INT(11) DEFAULT NULL, `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', `update_time` DATETIME NOT NULL DEFA

2020-08-05 22:34:48 1183

原创 Mysql之Show Profile进行SQL分析(Show Profile分析步骤、type、全局查询日志)

Show Profile进行SQL分析,是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优的测量默认情况下,参数处于关闭状态,并保持最近15次的运行结果。Show Profile分析步骤1.是否支持,看看当前MySQL版本是否支持2.开启功能,默认是关闭,使用前需要开启typeall 显示所有的开销信息block io 显示块IO相关开销cpu 显示CPU相关开销信息ipc 显示发送和接收相关开销信息

2020-08-05 22:29:39 163

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除