我是django中的新手。我想验证用户身份。但我无法使用身份验证功能。我已经查看了django中的身份验证功能。并且它总是显示TypeError。我在不同的时间使用了unicode和string,但总是显示TypeError。 请任何帮助将不胜感激。 我正在附上我的代码:
def loginTest(request):
if request.method == 'POST':
user = authenticate(username=request.POST['username'], password=request.POST['password'])
if user is not None:
login(request,user)
return HomePage(request)
else:
return HttpResponseRedirect('/login/')
def login(request):
return render_to_response('login.html', {}, context_instance=RequestContext(request))
@login_required(login_url='/login/')
def HomePage(req):
templ = get_template('HomePage.html')
variables = Context({})
output = templ.render(variables)
return HttpResponse(output)
答案 0 :(得分:0)
首先,您自己定义了一个“登录”视图,所以当您尝试调用login(request, user)
时(我假设是Django内置的“登录”功能设置用户会话),而是调用你的功能:
def login(request):
return render_to_response('login.html',{},context_instance=RequestContext(request))
其次,TypeError出现在哪里?我假设您已经知道了Django traceback错误页面中出现的错误的性质,如果您可以发布回溯本身的“复制并粘贴视图”,那将非常有用。
您还可以通过一些快捷功能轻松清理您的视图。 :)
但是,由于您的问题的性质是如何在Django中进行身份验证,因此以下是实现手动登录过程所需的基础,大部分内容仅来自relevant documentation:
views.py
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
def loginTest(request):
username = request.POST["username"]
password = request.POST["password"]
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
HttpResponseRedirect("/")
else:
HttpResponseRedirect("/login/")
@login_required(login_url="/login/")
def HomePage(request):
return render(request, "HomePage.html")
urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'authtest.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^login/', 'django.contrib.auth.views.login'),
url(r'^', 'custom.views.HomePage'),
)
另外,为了将来参考,您可以发布整个脚本,以便我们可以看到您在顶部导入的内容。