目前我需要开发一个商品的询价系统,大致功能如下:
1.用户登录
2.用户注销
3.用户注册
4.用户已询价商品(询价需要邮件通知相关人员)
5.商品页(商品详情页、单个商品询价)
用户登录
那么在登录的时候,我们需要明白,客户端服务器是如何判断用户的
如以下是Django中的视图函数,功能是登录,在登录时首先验证密码,其次验证成功后设置set cookie 值,这个值就是用来判断当前用户是谁,下面这句代码的意思设置cookie的值中添加usid的值,时间为1个小时,一个小时以后,就自动退出
代码语言:python代码运行次数:0复制response.set_cookie('usid',user.first().id,max_age=3600)
代码语言:python代码运行次数:3复制def login(request):
# 判断请求是否是post
if request.method == 'POST':
# 获取邮箱和密码信息
email = request.POST.get('email')
passwd = request.POST.get('passwd')
# 查询用户是否存在于数据库中
user = UserMondel.objects.filter(email=email)
if user.exists():
# 存在则对比密码,注意,密码要进行加密后进行对比
inputpasswd = sha256_encrypt(passwd)
print(inputpasswd)
# 对比密码,
if user.first().password == inputpasswd:
# 密码校验正确,则设置cookie信息,时间为1小时失效
response = redirect(reverse('index'))
response.set_cookie('usid',user.first().id,max_age=3600)
return response
else:
return HttpResponse('用户名或密码错误')
else:
return HttpResponse('用户名不存在,请先注册')
return render(request, 'login.html',)
用户注销
用户注销非常简单,只需要将cookie的值删除掉就行了,如下:
代码语言:python代码运行次数:0复制def logout(request):
# 反向解析至登录页
repsone = redirect(reverse('login'))
# 删除响应的usid值
repsone.delete_cookie('usid')
return repsone
用户注册
用户注册,这部分需要验证的东西比较多,包括邮箱是否正确,验证码是否填写完毕,
我之前有写过关于Django下的验证码,有兴趣可以先去看看
https://cloud.tencent.com/developer/article/2413777
在注册的时候,对密码要进行简单加密处理,不要直接存字符串,以免泄露,使用post方式获取当前请求的数据,已便做验证,我下面也对验证码的时间做验证
代码语言:python代码运行次数:0复制def register(request):
# 判断提交过来的数据是否使用了post方法
if request.method == 'POST':
# 如果使用了post方法,我们获取邮件、用户名和密码
email = request.POST.get('email')
uname = request.POST.get('uname')
passwd = request.POST.get('passwd')
phone = request.POST.get('phone')
company = request.POST.get('company')
emailcode = request.POST.get('emailcode')
codevalue = request.POST.get('codevalue')
imagesvalue = request.POST.get('imagesvalue')
if imagesvalue == None:
return render(request, 'register.html', )
# 获取图片的值,从数据库中找到,并对比是否相等
codedata = validationimage.objects.all()[int(imagesvalue)].code
if codedata != codevalue:
return JsonResponse({'data': "图片验证码错误"})
# 获取此次邮件发送的验证码
verifica = verification.objects.filter(email=email,code=emailcode).first()
#
# 获取当前时间
now = timezone.now()
# 如果邮件验证码存在则对比时间是否在1小时之内
if verifica:
if now < verifica.time:
# 使用邮箱查询用户是否存在,
user = UserMondel.objects.filter(email=email)
# 存在则提示"用户已存在"
if user.exists():
return JsonResponse({'data': "用户已存在"})
else:
# 不存在则要进行创建,并对密码进行加密存储
password = sha256_encrypt(passwd)
UserMondel.objects.create(email=email, uname=uname, password=password, phone=phone, company=company)
return JsonResponse({'data': "已注册成功"})
else:
return JsonResponse({'data': "验证码已过期"})
else:
return JsonResponse({'data': "验证码已过期"})
else:
return render(request, 'register.html',)
用户已询价商品
已询价商品,本质上就是将用户点击询价的商品存储的数据库中,然后渲染出来即可
inquiry:是数据库,存放这关于用户点击询价后按钮保存的数据,user是此时登录的用户,显示在主页上面
代码语言:python代码运行次数:0复制def user_inquiry(request):
# 获取cookie中的usid值,不存在则默认0
usid = request.COOKIES.get('usid', 0)
# 查询数据库中是否存在用户
user = UserMondel.objects.filter(id=usid).first()
# 如果usid等于0,则代表用户不存在,则需定位到登录页
if usid == 0:
return redirect(reverse('login'))
userinfo = UserMondel.objects.filter(id=usid).first()
inquiry = Inquiry.objects.filter(user=userinfo,is_delete=False)
return render(request, 'user_inquiries.html', {'userinquir': inquiry, "user": user})
备注:
在使用IIS搭建Django的项目时,我发起了一个GET请求,如下面所示,发现在使用runserver时inquiry.exists()为True 但使用IIS搭建后为False,后来发现是应为我请求的GET请求中包含中文,导致请求错误,在使用是尤其注意这点,建议在使用请求时,使用POST方式进行
代码语言:python代码运行次数:0复制def delete_user_inquiry(request,inquiryId):
# 获取cookie中的usid值,不存在则默认0
usid = request.COOKIES.get('usid', 0)
# 查询数据库中是否存在用户
user = UserMondel.objects.filter(id=usid).first()
# 如果usid等于0,则代表用户不存在,则需定位到登录页
if usid == 0:
return redirect(reverse('login'))
if request.method == "GET":
print(inquiryId,usid)
userid = UserMondel.objects.filter(id=usid).first()
print(userid)
inquiry = Inquiry.objects.filter(id=inquiryId)
print(inquiry)
a = inquiry.exists()
if inquiry.exists():
inquiry.update(is_delete=True)
return JsonResponse({'data': "OK","message":f"{userid},{inquiry},{a}"})
else:
return JsonResponse({'data':"NG","message":f"{userid},{inquiry},{a}"})
else:
return JsonResponse({'data': "NB"})