本系统主要采用python3.6作为程序开发主要语言。MySQL数据库用于结构化数据的存储,Navicat作为辅助管理工具可视化管理MySQL数据库。为缓解高并发的问题,采用Redis作为系统的数据缓存数据库。整体采用的架构是基于MTV模式的Django1.11框架。后台管理系统为自行定制的Xadmin2.0的管理系统。项目部署采用Uwsgi+nginx。
效果演示录屏:https://www.bilibili.com/video/BV1Mg4y1B7CZ
开发环境:
操作系统:windows7
主要开发语言:Python3.6
IDE:Pycharm2018.1.3 x86
关系型数据库:MySQL 8.0
数据库管理工具:Navicat for MySQL
系统开发框架:Django
中间件:Redis
虚拟环境:Virtualenv
后台管理组件:Xadmin
首先在Pycharm中重新创建一个Django项目工程vtour,工程建立完成后,按照之前分析设计阶段所分割出来又重新组合后的各功能模块完成各app的新建,结果如下图所示:
该模块主要包含的功能为用户登录注册和个人中心。
- 注册登录
一个视图函数,是一个比较简单的Python 函数,也可简称为视图,它接受网络请求且返回网络响应。响应内容多样,包括HTML网站页面、图文素材或重定向等等。无论其自身含有何种逻辑,都需返回响应。为将代码放于某地,约定统一将视图函数放于应用程序或项目目录下名为views.py的文件中。
注册逻辑为:由用户在注册表单的文本框内按照标签提示正确填写个注册数据,如手机号、密码等等。由此按照该注册业务的逻辑可知,首先应创建RegisterView视图并在urls.py文件中添加该应用下用于路径分配的语句:path('register/', RegisterView.as_view(), name="register"),接着新建forms.py继承Form父类中生成注册表单RegisterPostForm和RegisterGetForm,同时根据需要添加必须要用户填写并通过系统验证的部分属性,按照本系统的设计,主要有mobile、code、password、captcha等。借助验证码库实现图形验证码的展示。本系统采用第三方验证码库django-simple-captcha来提供验证码,在pip install安装此第三方库后,将captcha数据表生成到数据库。前文的captcha字段设置captcha=CaptchaField(),在各字段中可以自定义错误信息提示。前端页面register.html页面中加入{ {register_form.captcha}}来取得随机的图形验证码。
当用户注册时,其手机号对应的手机接收到四位随机数字组成的验证码的实现则是由当前系统用户在前端页面的注册表单内相应的文本框内,键入自己的手机号码,接着点击“获取验证码”,此时系统将文本框内的手机号post到后台。后台将会验证手机号是否符合规定,是否已被注册占用,如果顺利通过验证,则生成随机四位验证码,并通过脚本的运行,让短信运营商向该手机号,发送刚刚生成并保存在redis中的验证码;如果验证未通过,就返回错误信息,用户在收到含验证码的短信后,点击注册,再次将表单内所有信息post到后台。(对接的短信服务商采用的是云片网:①注册登录云片网后完善开发者信息、新增签名以及模板,②等待审核通过后,设置ip白名单并对账户进行充值以获取短信发送条数。③在utils文件夹下新建yunpian.py,编写短信发送的脚本。④在settings.py中增添api接口信息。)
完成相关配置后,编辑RegisterView后台逻辑,添加get方法,实例化表单,经由render函数渲染html后把网页返回给前端用户。添加post方法,生成一个表单实例并获取用户填写的注册信息。调用is_valid()方法验证提交上来的信息是否符合要求,包括四位随机数字验证码是否符合(设置验证码5分钟过期),保存在Redis数据库中。如果符合各项要求,获取用户填写的手机号和密码,实例化一个user_profile对象,将当前上传得到的注册数据提交至MySQL中,即在用户表中多添加一条数据并保存。成功注册后自动登录跳转到首页。
注册界面如下图所示:
登录功能则新建LoginView,通过前端获取用户名和密码,通过anthentica