基于Django的电子商务网站开发(连载10)

简介: 本节介绍了用户信息模块,涵盖用户注册、登录、信息展示及密码修改功能。重点描述了用户注册流程,包括urls.py配置、forms.py中的表单定义及views.py中的处理逻辑。通过详细代码示例展示了如何实现用户信息验证与存储,并提供了注册页面的模板设计。特别强调了使用`request.POST.get`方法以支持后续接口测试。图3-2展示了实际的注册页面效果。

3.3 用户信息模块

用户信息模块包括“用户信息的注册”“用户登录”“显示用户信息”和“用户密码的修改”。其中“用户信息的注册”与“用户登录”在本书第2章进行了详细地描述,这一章将进行系统地归纳与优化。数据模型如下。

...#用户class User(models.Model): username = models.CharField(max_length=50) #用户名 password = models.CharField(max_length=50) #密码 email = models.EmailField() #Email def __str__(self): return self.username ...

3.3.1用户注册

只有通过用户注册的用户才可以登录系统,根据需求,在这个系统中用户注册需要填写用户登录名、密码和Emil地址。

1. urls.py

...url(r'^register/$', views.register), ...

2.views.py

把所有的表单定义在一个名为forms.py的文件中,用户注册的表单定义如下。

...from django import forms #定义注册表单模型class UserForm(forms.Form): username = forms.CharField(label='用户名',max_length=100) password = forms.CharField(label='密码',widget=forms.PasswordInput())email = forms.EmailField(label='电子邮件')...

在这里。

(1)username 中的max_length=100表示输入的最大字符限制在100个。

(2)password 中的widget=forms.PasswordInput()表示文本信息为密码格式。

(3)email中的EmailField表示格式为HTML5中的Email格式。

然后在views.py中通过fromgoods.forms import UserForm来引入。下面是views.py中关于注册的代码。

...from goods.forms import UserForm...#用户注册def register(request): if request.method == "POST": #判断表单是否提交状态 uf = UserForm(request.POST) #获得表单变量 if uf.is_valid(): #判断表单数据是否正确 #获取表单信息 username = (request.POST.get('username')).strip() #获取用户名信息 password = (request.POST.get('password')).strip() #获取密码信息 email = (request.POST.get('email')).strip()#获取Email信息#查找数据库中是否存在相同用户名 user_list = User.objects.filter(username=username) if user_list:#如果存在,报"用户名已经存在!"错误信息并且回到注册页面return render_to_response('register.html',{'uf':uf,"error":"用户名已经存在!"}) else: #否则将表单写入数据库 user = User() user.username = username user.password = password user.email = email user.save() #返回登录页面 uf = LoginForm() return render_to_response('index.html',{'uf':uf}) else: #如果不是表单提交状态,显示表单信息 uf = UserForm()return render_to_response('register.html',{'uf':uf})...

(1)通过ifrequest.method == "POST":来判断当前状态是否为表单提交状态,如果不是,那么显示表单注册页面: uf = UserForm(),return render_to_response('register.html',{'uf':uf}),否则验证提交的表单信息:ifuf.is_valid():。

(2)判断如果表单提交正确,如果正确,获取提交的信息:username = (request.POST.get('username')).strip()和password =(request.POST.get('password')).strip()。

(3)通过user_list=User.objects.filter(username=username)的返回变量user_list是否为空来判断注册的用户名是否已经被注册过,如果未注册过那么提示错误信息,否则接受提交的注册信息,将其保存在数据库中...user.save()。

在这里特别需要注意的是,由于后面需要用到基于Requests的接口测试,所以这里必须使用request.POST.get('username')来获取表单数据。

3.模板

模板文件为register.html,其内容为。

{%load staticfiles%}<!DOCTYPE html><html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> <meta name="description" content=""> <meta name="author" content=""> <title>电子商务系统-注册</title> <!-- Bootstrap core CSS --> <link href="{%static 'css/signin.css'%}" rel="stylesheet"--> <!-- Custom styles for this template --> <link href="{%static 'css/bootstrap.min.css'%}" rel="stylesheet"--> <link href="{%static 'css/my.css'%}" rel="stylesheet"> </head> <body> <div> <form method="post" enctype="multipart/form-data"> <h2>电子商务系统-注册</h2> {{uf.as_p}} <p style="color:red">{{error}}</p><br> <button class="btn btn-lg btn-primary btn-block" type="submit">注册</button><br> <a href="/index/">登录</a> </form> </div><!-- /container --> </body></html>

其中。

(1){{error}}:显示的是错误提示信息。

(2){{uf.as_p}}:显示的是表单信息。

如图3-2所示。

图3-2 注册页面

目录
相关文章
|
5天前
|
数据安全/隐私保护 Python
基于Django的电子商务网站开发(连载9)
根据3.1节的需求分析,设计了电子商务系统的数据模型,包括用户、地址、商品、单个订单和总订单五个对象。各对象间为一对多关系,并在相关表中设置外键,确保数据的一致性和完整性。通过具体模型定义和字段描述,实现了系统的功能需求。
20 5
基于Django的电子商务网站开发(连载9)
|
5天前
|
网络协议 网络安全 数据安全/隐私保护
基于Django的电子商务网站开发(连载4)
本文首先介绍了四种安装Django的方法:使用pip安装、通过tar.gz文件安装、使用whl文件安装以及从GitHub上安装。接着,文章对HTTP协议进行了详细介绍,包括其历史背景、不同版本的特点以及工作原理。特别是在HTTP的工作原理部分,通过对比HTTP与HTTPS的协议栈图,展示了它们在网络中的具体位置及差异。
24 4
基于Django的电子商务网站开发(连载4)
|
5天前
|
存储 开发框架 网络安全
基于Django的电子商务网站开发(连载5)
HTTP请求包括八种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT,常用的是GET和POST。请求结构分为请求行、请求头和请求正文。HTTP响应则包含状态码,如200表示成功,404表示未找到,500表示服务器内部错误。响应同样分为响应行、响应头和响应正文。状态码按类别分为1XX(指示信息)、2XX(成功)、3XX(重定向)、4XX(客户端错误)和5XX(服务器错误)。
19 2
基于Django的电子商务网站开发(连载5)
|
5天前
|
网络协议 应用服务中间件 Apache
基于Django的电子商务网站开发(连载6)
HTTP协议最初设计为无连接协议,每次请求完成后断开连接以节省资源。但随着网页复杂度增加,频繁建立连接效率低下,因此HTTP 1.1引入了Keep-Alive机制,维持客户端与服务器间的连接,减少重复建立连接的开销。然而,不同HTML页面间无法通过此机制保持连接。此机制在提升效率的同时,也可能对高负载网站的性能产生影响。
19 2
基于Django的电子商务网站开发(连载6)
|
5天前
|
SQL 前端开发 Unix
基于Django的电子商务网站开发(连载3)
本文首先介绍了Python的安装选择,建议基于2.X系列进行维护工作,而新项目则选用3.X系列,并提供了官方下载地址及环境配置说明。随后,文章详细阐述了Django框架的特点和设计理念,包括其核心组件、快速开发原则及DRY原则,并简述了Django的工作流程和技术优势。
17 6
|
XML 测试技术 数据库
基于Django的电子商务网站开发(连载24)
基于Django的电子商务网站开发(连载24)
49 0
基于Django的电子商务网站开发(连载24)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载17)
基于Django的电子商务网站开发(连载17)
64 0
基于Django的电子商务网站开发(连载17)
|
XML 测试技术 数据格式
基于Django的电子商务网站开发(连载33)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
86 0
基于Django的电子商务网站开发(连载33)
|
移动开发 数据库 数据安全/隐私保护
基于Django的电子商务网站开发(连载10)
基于Django的电子商务网站开发(连载10)
76 0
基于Django的电子商务网站开发(连载10)
|
测试技术 Python
基于Django的电子商务网站开发(连载36)
顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript, 主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
85 0
基于Django的电子商务网站开发(连载36)