广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Django商城项目注册功能的实现
  • 931
分享到

Django商城项目注册功能的实现

2024-04-02 19:04:59 931人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录设计到的前端知识注册业务实现前端注册业务逻辑导入vue.js和ajax请求的js库准备reGISter.js文件后端业务注册逻辑设计到的前端知识 项目的前端页面使用Vue来实现

设计到的前端知识

项目的前端页面使用Vue来实现局部刷新,通过数据的双向绑定实现与用户的交互,下面来看一下需求,在用户输入内容后,前端需要做一些简单的规则校验,我们希望在在用户输入后能够实时检测,如果有错误能够在输入框的下方显示出来。


<li>
    <label>用户名:</label>
    <input type="text" name="username" id="user_name">
    <span class="error_tip">请输入5-20个字符的用户</span>
</li>
<li>
    <label>密码:</label>
    <input type="passWord" name="password" id="pwd">
    <span class="error_tip">请输入8-20位的密码</span>
</li>

上面是一个用户和密码的输入框,当用户输入完用户名以后,光标离开输入框,能够实时的检测输入内容的正确性,当输入有问题的时候,在输入框的下方显示错误信息。

v-model实现数据的双向绑定,v-on进行事件绑定,v-show是控制dom显示与否,下面是加入vue后的部分代码


<li>
    <label>用户名:</label>
    <input type="text" name="username" id="user_name" v-model="username" @blur="check_username">
    <span class="error_tip" v-show="error_name">[[error_name_message]]</span>
</li>
<li>
    <label>密码:</label>
    <input type="password" name="password" id="pwd" v-model="password" @blur="check_password">
    <span class="error_tip" v-show="error_password">请输入8-20位的密码</span>
</li>

用户输入的用户名和username变量绑定,光标消失触发绑定时间check_username,通过v-show绑定到布尔值变量error_name,来控制是否显示字符串变量error_name_message,其他的输入框都类似这种操作。

注册业务实现

前端注册业务逻辑

注册表单代码:


<fORM method="post" class="register_form" >
    {{ csrf_input }}
    <ul>
        <li>
            <label>用户名:</label>
            <input type="text" name="username" id="user_name" v-model="username" @blur="check_username">
            <span class="error_tip" v-show="error_name">[[error_name_message]]</span>
        </li>
        <li>
            <label>密码:</label>
            <input type="password" name="password" id="pwd" v-model="password" @blur="check_password">
            <span class="error_tip" v-show="error_password">请输入8-20位的密码</span>
        </li>
        <li>
            <label>确认密码:</label>
            <input type="password" v-model="password2" @blur="check_password2" name="password2"
                   id="cpwd">
            <span class="error_tip" v-show="error_password2">两次输入的密码不一致</span>
        </li>
        <li>
            <label>手机号:</label>
            <input type="text" v-model="mobile" @blur="check_mobile" name="mobile" id="phone">
            <span class="error_tip" v-show="error_mobile">[[ error_mobile_message ]]</span>
        </li>

        <li>
            <label>图形验证码:</label>
            <input type="text" name="image_code" id="pic_code" class="msg_input">
            <img src="{{ static('images/pic_code.jpg') }}" alt="图形验证码" class="pic_code">
            <span class="error_tip">请填写图形验证码</span>
        </li>
        <li>
            <label>短信验证码:</label>
            <input type="text" name="sms_code" id="msg_code" class="msg_input">
            <a href="javascript:;" rel="external nofollow"  class="get_msg_code">获取短信验证码</a>
            <span class="error_tip">请填写短信验证码</span>
        </li>
        <li class="agreement">
            <input type="checkbox" name="allow" id="allow" v-model="allow" @change="check_allow">
            <label>同意”商城用户使用协议“</label>
            <span class="error_tip" v-show="error_allow">请勾选用户协议</span>
        </li>
        <li class="reg_sub">
            <input type="submit" value="注 册" @change="on_submit">
            {% if register_errmsg %}
                <span class="error_tip2">{{ register_errmsg }}</span>
            {% endif %}
        </li>
    </ul>
</form>

导入vue.js和ajax请求的js库


<script type="text/javascript" src="{{ static('js/vue-2.5.16.js') }}"></script>
<script type="text/javascript" src="{{ static('js/axiOS-0.18.0.min.js') }}"></script>

准备register.js文件

register.js文件主要处理注册页面的交互事件,并且向服务端提交注册表单请求


<script type="text/javascript" src="{{ static('js/register.js') }}"></script>

下面是实现的前端校验逻辑以及表单提交逻辑


methods: {
    // 校验用户名
    check_username() {
        let re = /^[a-zA-Z0-9_-]{5,20}$/;
        if (re.test(this.username)) {
            this.error_name = false;
        } else {
            this.error_name_message = '请输入5-20个字符的用户名';
            this.error_name = true;
        }
    },
    // 校验密码
    check_password() {
        let re = /^[0-9A-Za-z]{8,20}$/;
        this.error_password = !re.test(this.password);
    },
    // 校验确认密码
    check_password2() {
        if (this.password !== this.password2) {
            this.error_password2 = true;
        } else {
            this.error_password2 = false;
        }
    },
    // 校验手机号
    check_mobile() {
        let re = /^1[3-9]\d{9}$/;
        if (re.test(this.mobile)) {
            this.error_mobile = false;
        } else {
            this.error_mobile_message = '您输入的手机号格式不正确';
            this.error_mobile = true;
        }
    },
    // 校验是否勾选协议
    check_allow() {
        this.error_allow = !this.allow;
    },
    // 监听表单提交事件
    on_submit() {
        this.check_username();
        this.check_password();
        this.check_password2();
        this.check_mobile();
        this.check_allow();
				# 输入字段中有一个不符合规则就禁止
        if (this.error_name === true || this.error_password === true || this.error_password2 === true
            || this.error_mobile === true || this.error_allow === true) {
            // 禁用表单的提交
            window.event.returnValue = false;
        }
    },
}

后端业务注册逻辑

在用户输完用户名之后,我们往往希望能够跟快的给出这个用户名是否符合注册需求,前面只是对用户名的规则进行了校验,还想知道他是否已经在系统注册过了,不然当用户都输完提交注册再给出用户名或者手机号已经注册过,体验不是特别好。所以需要在光标离开用户名输入框的时候就请求服务端来判断是否注册过。

定义路由


path('register/', views.RegisterView.as_view(), name='register'),  # name添加命名空间
path('usernames/<str:username>', views.UsernameCountView.as_view(), name="username"),
re_path(r'mobiles/(?P<mobile>1[3-9]\d{9})', views.MobileCountView.as_view(), name='mobile')

编写视图类


class UsernameCountView(View):

    def get(self, request, username):
        """
        查询该用户名是否在系统中存在
        :param request: 请求对像
        :param username: 前端传递的用户名
        :return:
        """
        count = User.objects.filter(username=username).count()
        return Http.JSONResponse({'code':1001, 'msg':'用户已存在'}) if count == 1 \
            else http.JsonResponse({'code': 1000, 'msg': ''})

这里没有对响应做统一处理封装,后面专门介绍一下。

然后就是注册视图类的编写了:


class RegisterView(View):
    """用户注册视图类"""

    def get(self, request):
        '''获取注册页面'''
        return render(request, 'register.html')

    def post(self, request):
        """"""
        username = request.POST.get('username')
        password = request.POST.get('password')
        password2 = request.POST.get('password2')
        mobile = request.POST.get('mobile')
        allow = request.POST.get('allow')
        # 判断参数是否齐全
        if not all([username, password, password2, mobile, allow]):
            return http.HttpResponseForbidden('缺少必传参数')
        # 判断用户名是否是5-20个字符
        if not re.match(r'^[a-zA-Z0-9_-]{5,20}$', username):
            return http.HttpResponseForbidden('请输入5-20个字符的用户名')
        # 判断密码是否是8-20个数字
        if not re.match(r'^[0-9A-Za-z]{8,20}$', password):
            return http.HttpResponseForbidden('请输入8-20位的密码')
        # 判断两次密码是否一致
        if password != password2:
            return http.HttpResponseForbidden('两次输入的密码不一致')
        # 判断手机号是否合法
        if not re.match(r'^1[3-9]\d{9}$', mobile):
            return http.HttpResponseForbidden('请输入正确的手机号码')
        # 判断是否勾选用户协议
        if allow != 'on':
            return http.HttpResponseForbidden('请勾选用户协议')

        try:
            user = User.objects.create_user(username=username, password=password, mobile=mobile)
        except DatabaseError as e:
            return render(request, 'register.html', {'register_errmsg': e.args})

        # 注册成功保存会话
        login(request, user)

        return redirect(reverse('contents:index'))

Django提供的login方法,封装了写入session的操作,帮助我们快速登入一个用户,并实现状态保持,将通过认证的用户的唯一标识信息(比如:用户ID)写入到当前浏览器的 cookie 和服务端的 session 中。


request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
request.session[BACKEND_SESSION_KEY] = backend
request.session[HASH_SESSION_KEY] = session_auth_hash

session会存入Redis,之前在工程创建时进行session存储的配置


SESSION_ENGINE = "djanGo.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"

链接: https://pan.baidu.com/s/1dFliI6KkNubd4k_OTEpqDA 提取码: h3Dp

以上就是Django商城项目注册功能的实现的详细内容,更多关于Django 注册功能的资料请关注编程网其它相关文章!

--结束END--

本文标题: Django商城项目注册功能的实现

本文链接: https://www.lsjlt.com/news/127643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Django商城项目注册功能的实现
    目录设计到的前端知识注册业务实现前端注册业务逻辑导入vue.js和ajax请求的js库准备register.js文件后端业务注册逻辑设计到的前端知识 项目的前端页面使用vue来实现...
    99+
    2022-11-12
  • django项目基于钩子验证的注册功能是怎么样的
    这期内容当中小编将会给大家带来有关django项目基于钩子验证的注册功能是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。  前端html  注册  {# 注册的开始#}  onsubmit=&qu...
    99+
    2023-06-02
  • PHP商城中的商品管理功能实现
    随着互联网的不断发展和进步,线上购物成为了现代人不可或缺的生活方式。而对于电商商城而言,商品管理是最为重要的一项功能之一。PHP商城中的商品管理功能,实现起来非常的简单方便,下面就来详细介绍一下。商品的添加在商品管理界面中,管理员可以选择添...
    99+
    2023-05-22
    PHP 商城 商品管理功能
  • PHP商城中的商品租赁功能实现
    随着人们生活水平的提高,逐渐有了更高的生活品质和消费需求,特别是对于一些高昂的商品,很多人都想尝试,但是却无法承担高昂的购买费用,这时商品租赁就成了一个非常不错的选择。随着网络技术、支付体系等方面的不断提升,电子商务平台已经成为了人们进行商...
    99+
    2023-05-21
    PHP 商城 租赁功能
  • springboot项目整合注册功能模块开发实战
    目录工程简介准备工作:第一步:注册功能的实现1.1持久层的设计1.2注册功能-业务层1.3控制层1.4前端页面的设计注册功能实现完成工程简介 准备工作: 项目所用到的html界面以及...
    99+
    2022-11-13
    springboot项目整合 springboot注册模块
  • PHP商城中的包邮功能实现
    随着电商的迅速发展,网购已经成为了很多人的首选。而对于线上商城而言,设置包邮功能是很重要的一个环节。在这篇文章中,我们将探讨如何在PHP商城中实现包邮功能。首先,我们需要了解什么是包邮功能。简单来说,包邮功能就是指商家在满足一定条件的情况下...
    99+
    2023-05-21
    PHP 商城 包邮功能
  • 如何在PHP项目中实现用户登录和注册功能?
    如何在PHP项目中实现用户登录和注册功能?在许多Web应用程序中,用户登录和注册功能是必不可少的。无论是电子商务网站、社交媒体还是论坛,用户登录和注册功能是为了确保用户身份安全,并为用户提供个性化的服务。本文将介绍如何在PHP项目中实现用户...
    99+
    2023-11-02
    PHP用户认证 PHP登录功能 PHP注册功能
  • JavaWeb 07_创建web项目连接MySQL实现注册登录功能
    一、创建一个web项目,参照JW/01_创建web项目及部署   二、在NAVICat 里建数据库 db_01,建表tb_user ,字段UName 、Pwd     三、在web下创建一个Directory, 设名字为JSPWorks...
    99+
    2015-04-14
    JavaWeb 07_创建web项目连接MySQL实现注册登录功能
  • PHP商城中的火拼团功能实现
    PHP商城是目前应用非常广泛的一种电子商务网站开发语言,根据调查数据显示,PHP商城获得了大多数网站的青睐。而火拼团作为一种新兴的团购模式,受到了越来越多消费者的喜爱。为了适应市场需求和用户体验,越来越多的PHP商城也增加了火拼团的功能。实...
    99+
    2023-05-24
    PHP 商城 火拼团
  • Flask登录注册项目的简单实现
    本文主要介绍了Flask登录注册项目的简单实现,分享给大家,具体如下: 目录结构 配置文件设计 /templates/config.py #数据库连接配置 import p...
    99+
    2022-11-12
  • IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能
    一、搭建SpringBoot项目 1.1、file ——> new ——> project——> Spring Initializr——> next——> next——> next...
    99+
    2022-05-20
    SpringBoot MyBatis MySql 注册 SpringBoot 动态登录
  • IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能
    IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能 https://mp.weixin.qq.com/s/urpCwcPztBjjxYdWVwhofg  IDEA下创建SpringBoot+MyBati...
    99+
    2016-07-13
    IDEA下创建SpringBoot+MyBatis+MySql项目实现动态登录与注册功能 数据库入门 数据库基础教程 数据库 mysql
  • PHP商城中的免费试用功能实现
    随着电商的不断发展,越来越多的消费者选择在网上购物。而作为一款优秀的电商平台,商城试用功能是必不可少的功能之一,通过试用功能能够增加产品的曝光率、提高消费者的购买意愿,从而增加销量和用户黏性。在实际开发过程中,如何实现一个PHP商城中的免费...
    99+
    2023-05-21
    免费试用 PHP 商城
  • PHP商城中的神秘礼盒功能实现
    如今,电子商务已经渗透到我们的生活中,人们可以在家通过电脑或手机随时购买需要的商品。随着电子商务越来越普及,购物网站中的特色功能也越来越多。其中,神秘礼盒是一种人们喜爱的购物体验。在这篇文章中,我们将介绍如何在PHP商城中实现神秘礼盒功能。...
    99+
    2023-05-22
    PHP 商城 礼盒功能
  • PHP商城中的超级礼包功能实现
    随着互联网的快速发展,购物等电子商务活动在我们的日常生活中已经变得越来越普遍。对于绝大多数的电子商务网站来说,超级礼包功能是一项非常重要的功能之一,这也是PHP商城中常见的功能之一。通过超级礼包功能,商家能够为消费者提供更便宜的商品和更多的...
    99+
    2023-05-21
    PHP 商城 礼包功能
  • 如何利用PHP实现商城的B2B功能
    随着电商市场的蓬勃发展,越来越多的企业选择了B2B电子商务模式,因为它可以让企业更快地扩展业务范围,更快地获取市场份额。而实现B2B功能的关键,就在于系统的开发。在此,我们将介绍如何利用PHP语言来实现商城的B2B功能。一、B2B电子商务的...
    99+
    2023-05-23
    PHP商城 BB功能 实现方案
  • Django城市信息查询功能的实现步骤
    目录前言数据准备阶段版本推荐项目实现阶段Django 工程的建立路由的配置及访问添加富文本模型创建城市与省份模型后台管理系统总结前言 基于 Pythgo的 Django 框架,编程实...
    99+
    2022-11-11
  • 如何利用PHP实现商城的拼团功能
    随着电商市场的不断发展壮大,拼团已经成为了一种新兴的购物方式。在吸引消费者的同时,拼团也为商家带来了更多的收益。那么,如何利用PHP实现商城的拼团功能呢?本文将为你详细介绍。一、了解拼团的基本原理拼团是指多个人在一定时间内共同购买同一商品,...
    99+
    2023-05-22
    PHP 商城 拼团
  • PHP商城中的关键词搜索功能实现
    在现如今的电商时代,搜索功能已成为了电商网站上不可或缺的一部分,能够大大提高用户的购物体验。在PHP商城中,关键词搜索功能更是实现了这个功能的集大成者。本文将从关键词搜索的原理开始,深入探讨PHP商城中的关键词搜索功能实现。一、关键词搜索原...
    99+
    2023-05-22
    PHP 商城 关键词搜索 功能实现
  • 如何利用PHP实现商城的闪购功能
    作为一款常用的Web编程语言,PHP被广泛应用于电商平台的开发中。其中,闪购功能成为了电商平台的重点之一,因此掌握如何利用PHP实现商城的闪购功能对电商平台的开发者来说非常必要。本文将介绍如何使用PHP实现商城的闪购功能。一、闪购的概念闪购...
    99+
    2023-05-22
    PHP 商城 闪购
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作