如何在Django中以编程方式验证用户身份?

Mri*_*lla 32 python authentication django

如何在Django中以编程方式登录用户?我有用户的用户名和密码.有没有让我登录他的方法?

Cat*_*lus 47

除了"以编程方式"之外别无他法.当然,这是记录在案的.

from django.contrib.auth import authenticate, login
user = authenticate(username = username, password = password)
if user is not None:
    login(request, user)
Run Code Online (Sandbox Code Playgroud)

  • 重新修订评论:[PEP 8](http://www.python.org/dev/peps/pep-0008/#other-recommendations)建议在关键字参数中省略`=`周围的空格,但当然你是随心所欲. (11认同)
  • @CatPlusPlus你真的认为这是一个糟糕的建议吗?多数民众赞成你. (4认同)
  • @jdg 你有什么实质性的争论,还是我错过了关于我们现在应该如何限定用户而不是 SO 上的帖子的备忘录?:/ (3认同)
  • 它倾向于认为空格有助于一般的可读性。让人们以他们想要的方式使用空格。这可能是 Python 中最让我烦恼的事情 (3认同)
  • @icktoofay 我很清楚 PEP 8 的建议。(这不是一个好的建议) (2认同)

Seb*_*zny 6

在以编程方式记录用户时,请注意,您可能会收到错误消息user has no attribute "backend".如果以前没有发生过,你也必须设置后端.使用此项目和一些示例代码的项目:

def splash_register(request):
  if request.session.get('beta'):

    if request.method=='POST':
        userform=MyUserCreationForm(request.POST)
        if userform.is_valid():
            #username of <30 char is required by Django User model.  I'm storing username as a hash of user email 

            user=userform.save(commit=False)
            user.username=hash(user.email)
            user.backend='django.contrib.auth.backends.ModelBackend'
            user.save()


            username=user.username
            password=str(userform.cleaned_data['password'])
            auth.login(request, user)
            request.session['first_visit']=True
            return HttpResponseRedirect("/")
        else:
            userform=MyUserCreationForm(request.POST)
            return render_to_response("website/splash_register.html", {'userform':userform}, context_instance=RequestContext(request))
    return render_to_response("website/splash_register.html", context_instance=RequestContext(request))     
else:
    return HttpResponseRedirect('/splash/')
Run Code Online (Sandbox Code Playgroud)