密码保护页面Django

2024-07-02 13:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为法官创建一个注册页面,但我想确保在进入注册页面之前,您必须输入密码,每个法官都将拥有我提供给他们的相同密码,他需要一个带有一个窗口的简单页面来输入我之前给出的密码。如果有人能告诉我如何创建这样一个模型,然后是它的形式,或者如果有任何其他更简单的方法,我将非常感谢任何提示

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']

但在我看来,我什么都没有,因为我写的东西都错了:/


Tags: 方法模型self密码modelmodelsformspassword
1条回答
网友
1楼 · 发布于 2024-07-02 13:28:44

为了清楚起见,我决定将此作为一个完整的答案。您可以执行以下操作:

In 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()是您选择使用的任何哈希函数。

相关问题 更多 >