Ответ на ваши вопросы. Сначала: если я создаю модель для собственных пользователей: хочу ли я создать собственную функцию аутентификации для входа в систему?Да Хочу ли я создать objects.get (), objects.all (), objects.create_user () и т. Д.?Нет
Вам нужно исправить ошибки:
views.py
from django.shortcuts import render,redirect
from django.http import HttpResponse
from .forms import SignUp,UserLogin #Wrong Import
from .models import users
from django.contrib.auth import authenticate,get_user_model,login,logout
from django.contrib.auth.models import User
def Userlogin(request):
form=UserLogin()
if request.method == 'POST':
user_login = UserLogin(request.POST or None) #Indentation
if user_login.is_valid():
username = request.POST.get('email', '')
password = request.POST.get('password', '')
getInfo=users.objects.get(email='example@mail.com')
user=authenticate(email=username,password=password)
if user is not None and user.is_active:
login(request,user)
return redirect('/')
args={'form':form} #Fix Indentation
return render(request,'html/login.html',args) #Fix Indentation
Models.py
class users(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=100, blank=False)
email=models.EmailField(max_length=100, blank=False, unique=True)
password=models.CharField(max_length=500, blank=False)
created_at=models.DateField(auto_now_add=True)
updated_at=models.DateField(auto_now_add=True)
def __str__(self):
return self.email
Кроме того, что вам нужно сделать, этоЗапустите Миграции.python manage.py makemigrations appname python manage.py migrate
Это автоматически создаст модель в базе данных, и, следовательно, ORM Django будет работать для .objects.get
=========== Обновить =========
Изменить Models.py (расширить пользователей по умолчанию, так как оно уже содержит поля электронной почты и пароля)
from django.db import models
from django.contrib.auth.models import User as AuthUser, UserManager
# Extend the base User model
class User(AuthUser):
class Meta:
db_table = 'user'
active = models.CharField(max_length=1)
last_modified = models.DateTimeField("last modified")
objects = UserManager()
ПереопределитьDjango Model Backend для пользователя
class CustomAuth(ModelBackend):
def authenticate(**credentials):
return super(CustomAuth, self).authenticate(**credentials)
def authenticate(self, username=None, password=None):
# Check the username/password and return a User.
if username != None and password != None:
# Get the user
try:
user = User.objects.get(email=username)
if user.check_password(password):
logger.info('User is authenticated, logging user in')
return user
except User.DoesNotExist:
pass
return None
def get_user(self, user_id):
try:
return User.objects.get(id=user_id)
except User.DoesNotExist:
return None
теперь вы можете использовать его как:
user = authenticate(username='test@gmail.com', password='testUser')
для дальнейшего использования: https://www.micahcarrick.com/django-email-authentication.html