-2

我创建了这个运行良好的注册表单。在同一个模板上,我创建了一个登录表单。注册表单有 3 个参数电子邮件、用户名和密码,而登录表单只有用户名和密码输入。当我尝试注册时一切正常,但是当我尝试登录时,它给了我 MultiValueDictKeyError

这是我的意见.py

from django.shortcuts import render
from django.contrib.auth.models import User
from django.contrib.auth import login, logout, authenticate
from django.db import IntegrityError

# Create your views here.

def usersignup(request):
    if request.method == 'GET':
        return render(request, 'social_media/user.html')
    else:
        try:
            user = User.objects.create_user(username=request.POST.get['username'], password=request.POST.get['password'], email=request.POST['email'])
            user.save()
            login(request, user)
            return render(request, 'social_media/base.html')
        except IntegrityError:
            return render(request, 'social_media/user.html', {'error':'User already exists'})

def loginuser(request):
    if request.method == 'GET':
        return render(request, 'social_media/user.html')
    else:
        user = authenticate(request, username=request.POST.get['username'], password=request.POST.get['password'])
        if user is none:
            return render(request, 'social_media/user.html', {'errorsignin':'Invalid User man'})
        else:
            login(request, user)
            return render(request, 'social_media/base.html')

这是我的 HTML 表单:

{% load static %}

<form action="" method="POST">
    {% csrf_token %}
    <input type="text" name="username" placeholder="Username">
    <input type="email" name="email" placeholder="Email">
    <input type="password" name="password" placeholder="Password">
    <button type="submit">Sign In</button>
</form>
                
<form action="" method="POST">
    {% csrf_token %}
    <input type="text" name="username" placeholder="Username">
    <input type="email" name="email" placeholder="Email">
    <input type="password" name="password" placeholder="Password">
    <button type="submit">Sign Up</button>
</form>

   

有什么方法可以让我只使用用户名和密码来注册用户而不是电子邮件,或者我必须添加一个电子邮件输入字段来登录用户!

问候

万什

4

2 回答 2

0

代替

request.POST['']

request.POST.get('')

到处

例子

request.POST['username']

request.POST.get('username')
于 2020-07-22T19:08:40.790 回答
0

get 是一种在views.py 中用get() 替换get[] 的方法
在html 中纠正你的表单动作

于 2020-07-22T20:12:22.517 回答