如何在django中使用用户身份验证

时间:2015-09-01 07:51:46

标签: python django mongodb authentication

我有一个html模板,我想用于django中的身份验证。我正在使用pymongo连接到远程mongodb和fetch_data。远程mongodb有一个用户名为&演示用户的密码。我读到django有一个内置的身份验证模块,但我不想使用它。

我的模板:

<form action="/index.html">
    <div class="form-group">
        <div class="input-group">
            <div class="input-group-addon"><i class="fa fa-user"></i></div>
            <input type="text" class="form-control" placeholder="Username">
        </div>
    </div>
    <div class="form-group">
        <div class="input-group">
            <div class="input-group-addon"><i class="fa fa-asterisk"></i></div>
            <input type="password" class="form-control" placeholder="Password">
        </div>
    </div>
    <div class="row">
        <div class="col-xs-8 text-left checkbox">
            <label class="form-checkbox form-icon">
            <input type="checkbox"> Remember me
            </label>
        </div>
        <div class="col-xs-4">
            <div class="form-group text-right">
            <button class="btn btn-success text-uppercase" type="submit">Sign In</button>
            </div>
        </div>
    </div>
</form>

如何将模板中的数据传递到views.py文件?目前我没有使用任何身份验证。

my views.py:

from django.shortcuts import render
from django.http import HttpResponse

def login(request):
    return render(request, 'login/login.html')

在Pymongo中,我可以使用命令db.getCollection('users').find({'email':'%s'}) {{email}}来传递电子邮件并进行验证。

PS:我读过的大部分教程都是关于django的内置认证。

2 个答案:

答案 0 :(得分:2)

通用方法是编写自定义身份验证后端,为您处理身份验证。然后建议创建在模板中呈现的自定义表单。

身份验证后端

class YourBackend(object):
    def authenticate(self, username=None, password=None):
        # Check the username/password and return a User.

    def get_user(self, user_id):
        # return user by given user_id

设置

当您实现自己的身份验证后端时,您应该在django settings.py中定义它。第一个是django的默认身份验证后端。

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'your.own.authentication.backed',
)

<强>表格

from django import forms

class YourLoginForm(forms.Form):
   username = forms.CharField(max_length=254)
   password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)

查看

from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth import authenticate, get_backends

def login(request):
    form = YourLoginForm(request.POST or None)

    if form.method == 'POST':
       if form.is_valid():
           user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password'])

           if user:
               # redirect user to somewhere

    return render(request, 'login/login.html')

<强>模板

<form action="{% url 'your-login' %}" method="POST">
    {{ form.non_field_errors }}
    <div class="form-group">
        <div class="input-group">
            {{ form.username.errors }}
            <div class="input-group-addon"><i class="fa fa-user"></i></div>
            {{ form.username }}
        </div>
    </div>
    <div class="form-group">
        <div class="input-group">
            {{ form.username.errors }}
            <div class="input-group-addon"><i class="fa fa-asterisk"></i></div>
            {{ form.password }}
        </div>
    </div>
    <div class="row">
        <div class="col-xs-4">
            <div class="form-group text-right">
            <button class="btn btn-success text-uppercase" type="submit">Sign In</button>
            </div>
        </div>
    </div>
</form>

<强>网址

url(r'^login$', 'views.login', name='your-login'),

答案 1 :(得分:0)

我建议您使用外部库进行身份验证和分析。我记得他们有mongodb的选择。但是如果你想重新发明轮子,那么你应该使用以下。

1)创建扩展form.ModelForm的类来处理注册和身份验证过程。你可以read documentation如何做到这一点。如果能帮助您处理数据验证。您可以验证唯一的电子邮件字段和其他内容。

2)创建HTML表单。您可以使用现有的,只需将它与您的ModelClass连接即可。

3)如果您正在使用表单,您只需使用以下命令获取数据:

form = MyForm(request.POST or None)

然后您就可以将数据传递给此表单了。如果您不想使用和形成类,那么您可以在控制器中以这种方式检索:

if request.method == 'POST':
    login = request.POST.get('login', None)
    password = request.POST.get('password', None)

使用urls.py的表单分配控制器,方法相同:

url(r'^login$', 'views.login', name='login'),

因此,使用表单类,您可以在GET请求到达时传递空表单,如果它是POST请求,那么您可以收集数据。另外,在以下内容中添加到HTML表单:

<form action="/login" method="post">

4)当您从登录表单接收数据时,您应该进行身份验证。这可以使用自定义身份验证后端来完成。你可以find info here或只是谷歌如何做到这一点。我之前从未这样做过,但这很简单。