我有一个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}}
来传递电子邮件并进行验证。
答案 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或只是谷歌如何做到这一点。我之前从未这样做过,但这很简单。