python - 我如何使用 django ModelForm 对象和 Queryset 来做登录认证功能
问题描述
我的以下问题是关于如何开发一个可以比较 POST 请求数据 ( ModelForm
) 和模型中现有数据的函数queryset
。
这是 mi models.py:
class Employee(models.Model):
dni = models.CharField(max_length=9, null=False, blank=False, default="12345678R")
name = models.CharField(max_length=7)
surname = models.CharField(max_length=8)
email = models.CharField(max_length=20)
telefone_number = models.IntegerField()
user_nick = models.CharField(max_length=10, null=False, blank=False, default="user")
password = models.CharField(max_length=20, null=False, blank=False, default="password")
ticket = models.ManyToManyField(Ticket)
forms.py(EmployerLoginForm 仅用于user_nick
和password
):
class EmployerForm(forms.ModelForm):
class Meta:
model = Employee
fields = "__all__"
class EmployerLoginForm(forms.ModelForm):
class Meta:
model = Employee
exclude = ['dni', 'name', 'surname', 'email', 'telefone_number', 'ticket']
在这种情况下,为了开发登录功能,我使用了EmployerLoginForm
views.py:
_logger = nexus_services_logs.Logging(statics.NEXUS_VIEWS_LOGGING_NAME)
_views_manager_service = nexus_services_views_manager.ViewsManagerService()
_auth = nexus_services_auth.Authentication()
class IndexView(View):
def post(self, request, *args, **kwargs):
form = EmployerLoginForm(request.POST)
if(_auth.check_model_employer_authentication(form, _logger, _views_manager_service)):
if(_views_manager_service.validate_form(form, _logger)):
_views_manager_service.save_form(form, _logger)
return redirect('employerPortal')
else:
return redirect('index')
check_model_employer_authentication(form, _logger, _views_manager_service)
是我要比较表单数据和查询集的函数。当我无法使用 for 循环 (in auth.py
) 比较对象时,我发现了问题:
class Authentication():
def __init__(self):
self.employer_exist = False
def check_model_employer_authentication(self, model, logger, views_manager_service):
queryset_all_employers = Employee.objects.order_by("id")
context_exployers = views_manager_service.build_context_queryset_employers(queryset_all_employers)
for employer in context_exployers["employers"]:
if(employer.user_nick == model.user_nick and employer.password == model.password):
self.employer_exist = True
logger.info_log("Exist nick with similar password")
return True
else:
logger.error_log("Nick or password not exist or coincidence with object in db")
return False
我尝试使用上下文但不起作用。
解决方案
推荐阅读
- appium - Appium UIAutomator2 启用“allowInvisibleElements”设置
- python - python Pandas多处理池在使用drop函数后不起作用
- tinymce - Uncaught TypeError: Cannot read properties of undefined (reading 'paste')...但是为什么呢?
- php - Php 在 datetime_local 选择器中禁用过去的几天
- spring - 一对一双向映射的问题
- python - 对python中三个数组的输入求和
- java - 杰克逊 json 枚举没有正确反序列化
- python-3.x - 为什么这个while循环在Python中永远不会停止
- python - 并行化应用 Pandas
- python - 在 Ubuntu 20.04、Errno 2 上安装 Airflow Pip