Python Django web 开发商品询价系统

2024-05-13 16:39:53 浏览数 (2)

目前我需要开发一个商品的询价系统,大致功能如下:

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"})

0 人点赞