密码保护页面django

时间:2020-05-10 07:54:26

标签: python django

我想为法官们创建一个注册页面,但是我想确保在进入注册页面之前,您必须输入密码,每个法官都将拥有与我相同的密码,他需要一个带有一个窗口的简单页面来输入我之前提供的密码。如果有人能够说出如何创建这样的模型以及其形式,或者还有其他更简单的方法,我将不胜感激

class PasswordJudges(models.Model):
    password = models.CharField(max_length = 11)

    def __str__(self):
        return self.password
class JudgesPassword(forms.ModelForm):
    hasło = forms.CharField(widget = forms.PasswordInput())
    class Meta:
        model = PasswordJudges
        fields = ['password']

但鉴于a一无所有,因为我写的所有内容都是错误的:/

1 个答案:

答案 0 :(得分:0)

为了清晰起见,我决定对此做一个完整的回答。您可以执行以下操作:

在views.py

from django.shortcuts import redirect, render
from .forms import JudgesForm
from .models import JudgeDetail

def home_view(request):
    # Initiate your form
    judge_form = JudgesForm(request.POST or None)

    # Initiate your session variable
    request.session['judge_password'] = 'invalid'

    if (request.method == 'POST'):
        if judge_form.is_valid():
            user = judge_form.cleaned_data['user']
            password = judge_form.cleaned_data['password']

            try:
                # get the actual password info from the database
                user_object = JudgeDetail.objects.filter(username=user).get()
                actual_pw = user_object.password
                if (actual_pw == password):
                    request.session['judge_password'] = 'valid'
                    return redirect('judge_view')
                else:
                    return redirect('home_view')
            except:
                # handle exceptions here

    home_context = {
    # put context stuff here
    }

    return render(request, "home.html", home_context)

def judge_view(request):
    if (request.session['judge_password'] != 'valid'):
        return redirect('home_view')

    # ...

    judge_context = {
    # ...
    }

    return render(request, "judge.html", judge_context)

在models.py

from django.db import models

class JudgeDetail(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)

在forms.py

from django import forms
from .models import JudgeDetail

class JudgesForm(forms.ModelForm):
    class Meta:
        model = JudgeDetail
        widgets = {
        'password': forms.PasswordInput(),
    }


可选:您可能希望在数据库中为用户存储密码的哈希版本,而不是存储实际密码,这样具有管理员权限的人就看不到每个人的密码。如果这样做,只需在存储或比较密码之前执行password = hash_function(password),其中hash_function()是您选择使用的任何哈希函数。