Показать аутентифицированного пользователя, который "онлайн" (вошел в систему) в Django - PullRequest
0 голосов
/ 24 апреля 2020

это мой первый вопрос здесь в stackoverflow, я прошу прощения за любые ошибки или плохое объяснение моей проблемы. (Engli sh не является моим родным языком)

Я недавно начал изучать веб-разработку с использованием Django в качестве фреймворка, и я немного заблудился в некоторых темах, я работаю над сайтом, который имеет некоторые параметры: зарегистрировать нового пользователя и войти в систему. Когда пользователь успешно прошел аутентификацию, он может перейти на страницу «профиля», которая разрешена только для аутентифицированных пользователей. На этой странице я пытаюсь реализовать «веб-чат», такой как группа WhatsApp, чтобы пользователи могли отправлять сообщения, а другие пользователи могли видеть его и отвечать, и т. Д. c ... Но правильно, я пытаюсь правильно реализовать список "кто онлайн" на этой странице профиля, чтобы начать все это. Идея проста, какой бы человек ни вошел в систему, его нужно показать в каком-то списке в HTML, я вышлю код, чтобы продемонстрировать идею.

Мой views.py


def sign_in(request):
    context = {}

    user = request.user
    if user.is_authenticated:
        return redirect("/profile")

    if request.POST:
        form = AccountAuthenticationForm(request.POST)
        if form.is_valid():
            email = request.POST['email']
            raw_password = request.POST['password']
            user = authenticate(email=email, password=raw_password)

            if user:
                login(request, user)
                return redirect("/profile")
    else:
        form = AccountAuthenticationForm()

    context['signin_form'] = form
    return render(request, 'crud/signin.html', context)

My models.py


class MyAccountManage(BaseUserManager):
    def create_user(self, email, username, password=None):
        if not email:
            raise ValueError("Users must have an email adress!")
        if not username:
            raise ValueError("Users must have an username!")

        user = self.model(
            email=self.normalize_email(email),
            username=username,
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, username, password):
        user = self.create_user(
            email=self.normalize_email(email),
            username=username,
            password =password,
        )

        user.is_admin       = True
        user.is_staff       = True
        user.is_superuser   = True
        user.save(using=self._db)
        return user



class Account(AbstractBaseUser):
    email           = models.EmailField(verbose_name="email", max_length=60, unique=True)
    username        = models.CharField(max_length=30, unique=True)
    date_joined     = models.DateTimeField(verbose_name="date_joined", auto_now_add=True)
    last_login      = models.DateTimeField(verbose_name="last_login", auto_now=True)
    is_admin        = models.BooleanField(default=False)
    is_active       = models.BooleanField(default=True)
    is_staff        = models.BooleanField(default=False)
    is_superuser    = models.BooleanField(default=False)


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username',]
    objects = MyAccountManage()

    def __str__(self):
        return self.email 

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

My forms.py

class RegistrationForm(UserCreationForm):
    email = forms.EmailField(max_length=60, help_text='Required. Add a valid email adress')

    class Meta:
        model = Account
        fields = ("email", "username", "password1", "password2")

    def clean_email(self):
        return self.cleaned_data['email'].lower()


class AccountAuthenticationForm(forms.ModelForm):

    password = forms.CharField(label='Password', widget=forms.PasswordInput)

    class Meta:
        model = Account
        fields = ('email', 'password')

    def clean(self):
        if self.is_valid():
            email = self.cleaned_data['email']
            password = self.cleaned_data['password']
            if not authenticate(email=email, password=password):
                raise forms.ValidationError("Invalid Login")

К сожалению, Я не могу express 100% того, что я хочу сказать по-английски sh, поэтому я буду стараться изо всех сил учиться у вас, ребята, и я надеюсь, что вы меня понимаете.

Это мой первый опыт работы с фреймворком, HTML, CSS и JS и всем этим, так что я не знаю об этом глубоко, я нахожусь на "правильном пути"? Спасибо! Любой комментарий будет оценен. Если вам нужна дополнительная информация, просто скажите это, и я постараюсь сообщить вам.

...