python - 以 Django 形式保存用户密码的散列版本不起作用

标签 python django django-forms django-views

我一直在尝试保存用户密码的散列版本,但它不起作用。

表单.py:

class up_form(forms.ModelForm):
    class Meta:
        model = Users
        fields =['email', 'password', 'username', 'status']

views.py:

from myapp.forms import up_form
from django.contrib.auth.hashers import make_password
def register(request):
    if request.method == 'POST':
        sign_up = up_form(request.POST or None)
        if sign_up.is_valid():
            sign_up.password = make_password(sign_up.cleaned_data['password'])
            sign_up = sign_up.save(commit = False)
            sign_up.status = 1
            sign_up.save()

但是我的密码 仍然以纯文本形式保存。我该如何解决这个问题?

最佳答案

您需要切换语句的顺序,因为您已将对象命名为与表单本身相同的名称。

if request.method == 'POST':
    sign_up = up_form(request.POST)
    if sign_up.is_valid():
        sign_up = sign_up.save(commit = False)
        sign_up.password = make_password(sign_up.cleaned_data['password'])

我希望您也从该方法返回响应,并在 POST 请求后适本地重定向用户。

考虑这个版本:

def register(request):
    form = up_form(request.POST or None)
    if form.is_valid():
        sign_up = form.save(commit=False)
        sign_up.password = make_password(form.cleaned_data['password'])
        sign_up.status = 1
        sign_up.save()
        return redirect('/thank-you/')
    return render(request, 'sign_up_form.html', {'form': form})

关于python - 以 Django 形式保存用户密码的散列版本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112779/

相关文章:

jquery - 使用 Django/Python 将批量 .csv 数据上传到 webapp 的好方法是什么?

python - 如何解决 Django AllAuth - 'Connection aborted.' , error(13, 'Permission denied' ) 错误?

python - 创建可重用的 Django 应用程序?

python - 使用 matplotlib 和 pandas 创建连续图

python - 在 Python 中获取已在 mongoDB 集合中的文档的对象 ID

python - Django 表格 :Post request is got but data is not saved

python - 将查询集传递给django inlineform中的foreignkeyfield

python - Django - OneToOneField 未在管理中填充

python - ValueError : Error when checking input: expected conv2d_1_input to have 4 dimensions, 但得到形状为 (454, 512, 512) 的数组

Python:未定义全局名称 'maximum'