我希望用户使用三个字段(仅用户名,密码和OTP)登录。
这是我的 .html文件
{% extends "base.html" %}
{% load static %}
{% load bootstrap4 %}
{% block head %}
<title>HomePage</title>
{% endblock %}
{% block content %}
<div class="container">
<div style='width:500px;margin:0 auto;' class="panel panel-default">
<div class="panel-body">
<h1>Login</h1>
<form method="POST" class="form">
{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button type="submit" class="btn btn-primary">Login</button>
{% endbuttons %}
</form>
</div>
</div>
</div>
{% endblock %}
这是.html文件的浏览器视图
我想删除“ Otp设备”和“ Otp挑战”,因为它们对于我的情况是不必要的。
这是我的 models.py 文件
from django.contrib.auth.models import AbstractUser
class ProjectUser(AbstractUser):
# add additional fields in here
def __str__(self):
return self.email
这是我的urls.py文件
from django_otp.forms import OTPAuthenticationForm
from django.contrib.auth.views import LoginView
urlpatterns = [
path('user_login/', LoginView.as_view(template_name="accounts_app/user_login.html",
authentication_form=OTPAuthenticationForm), name='user_login'), ]
这是我使用的reference
答案 0 :(得分:1)
解决方案1:
最直接的方法是使用OTPAuthenticationForm
小部件将otp_device
子类化为otp_challenge
和HiddenInput
所用的表单字段。在您的应用文件夹中,创建一个名为forms.py
的新python文件,并添加以下内容
from django_otp.forms import OTPAuthenticationForm
from django import forms
class SimpleOTPAuthenticationForm(OTPAuthenticationForm):
otp_device = forms.CharField(required=False, widget=forms.HiddenInput)
otp_challenge = forms.CharField(required=False, widget=forms.HiddenInput)
在应用内的urls.py
文件中,添加import
并将LoginView
替换为以下
from .forms import SimpleOTPAuthenticationForm
path('user_login/', LoginView.as_view(template_name="accounts_app/user_login.html",
authentication_form=SimpleOTPAuthenticationForm), name='user_login'),
解决方案2:
替代选项,但需要更多样式以适合引导表单警告和其他功能。从使用以下内容开始
仅显示您想要在模板中使用的字段:由于不需要otp_device
和otp_challenge
,因此可以将它们省略。对于要显示的每个字段,请使用{% bootstrap_field form.<field> %}
,而不要使用{% bootstrap_form form %}
。有关自定义每个字段的呈现方式的所有选项,请参见here。每个字段的错误都可以用{{ form.errors.<field> }}
显示,但您必须自己设置样式。
以您的情况
{% bootstrap_field form.username %}
{% bootstrap_field form.password %}
{% bootstrap_field form.otp_token %}