python - /login login() 的 TypeError 缺少 1 个必需的位置参数:“用户”
问题描述
我收到错误“TypeError at /login login() 缺少 1 个必需的位置参数:'User'”
我是 Django 的新手。试图创建一个登录页面。
这是我的意见.py
from django.shortcuts import render,redirect
from .models import profile
from django.contrib.auth.models import User
from django.contrib import messages
from django.contrib.auth import authenticate
def index(request):
return render(request,'index.html',)
def login(request,User):
if request.method=='POST':
username= request.POST.get('username')
password = request.POST.get('password')
user=authenticate(username=username,password=password)
if user is not None:
user.login(request,user)
return render(request,'welcome.html',)
else:
messages.info(request , 'invalid credentials')
return render(request,'login.html')
else:
return render(request,'welcome.html')
这是我的 urls.py
from django.urls import path
from . import views
urlpatterns=[
path('',views.index,name='index'),
path('login',views.login,name='login'),
path('register',views.register,name="Login now")
]
解决方案
login
视图不应该包含参数,实际上对于给定的User
视图,您根本不需要导入User
模型。此外,为了登录,您应该使用login(…)
方法 [Django-doc]。由于您已经有一个名为 的方法login
,您应该以不同的名称导入它:
from django.contrib.auth import login as auth_login
# no User parameter
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
auth_login(request, user)
return render(request, 'welcome.html',)
else:
messages.info(request , 'invalid credentials')
return render(request, 'login.html')
else:
return render(request, 'welcome.html')
注意:如果 POST 请求成功,您应该制作一个
redirect
[Django-doc] 来实现Post/Redirect/Get模式 [wiki]。这样可以避免在用户刷新浏览器时发出相同的 POST 请求。
推荐阅读
- python - Python 相对导入导致 pylint 错误
- python - 如何处理用户创建的小部件?
- javascript - 动态更新 JavaScript 数组
- javascript - Javascript - 如何从响应中检索 html 标记的值
- c++ - 检查输入是否为数字或字符
- python - keras和scipy之间不同的2D卷积结果
- regex - Hive : 当列值由分隔符 (~) 分隔时,将单个记录扩展为多个记录
- mongodb - 如何备份 MongoDB 副本集的主要成员
- javascript - 如何在不更改原始数组的情况下复制数组并使用副本?
- sql - 连接 distinct() 返回的所有字符串值