электронная почта, вход, проблема аутентификации выхода - PullRequest
0 голосов
/ 09 июля 2020

Я хочу сделать так, чтобы, если пользователь вводит то же имя пользователя, что и другой пользователь, кроме показа ошибки, такой же, как электронная почта и функция входа в систему, как добавить аутентификацию по электронной почте ... не имя пользователя и, пожалуйста, проверьте мою функцию выхода, это правильно или неправильно. Спасибо

  1. Элемент списка

    Я хочу проверить, что имя пользователя уже существует, чем показать ошибку, такую ​​же, как и по электронной почте, и, пожалуйста, проверьте, мой логин Я хочу ввести адрес электронной почты, а не имя пользователя, что я могу сделать. моя функция выхода, правильная это или неправильная, скажите мне.

Элемент списка

views.py

from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from django.contrib import messages
from django.contrib import auth

from .models import *


def appofimage(request):
    cats = category.objects.all()
    images = post.objects.all()
    data = {'images': images, 'cats': cats}
    return render(request, 'home.html', data)


def signup(request):
    if request.method == 'POST':
        username1 = request.POST['username']
        firstname1 = request.POST['firstname']
        lastname1 = request.POST['lastname']
        email1 = request.POST['email']
        password = request.POST['password']
        password1 = request.POST['password1']

        # check for error messages

        # username should be under 15 characters
        if len(username1) > 15:
            messages.error(request, "Username must be under 15 characters")
            return redirect('appofimage')

        # password should match
        if password != password1:
            messages.error(request, 'Password do not match')
            return redirect('appofimage')

        # username should be alphanumeric mens does not contain any &*()%$ etc..
        if not username1.isalnum():
            messages.error(request, 'Username Should Only Contain Letters And Numbers')
            return redirect('appofimage')

        myuser = User.objects.create_user(username=username1, email=email1, password=password)
        myuser.first_name = firstname1
        myuser.last_name = lastname1
        myuser.save()
        messages.success(request, 'user has been created')
        return redirect('appofimage')

    else:
        return render(request, 'signup.html')


def login(request):
    if request.method == 'POST':
        username1 = request.POST['username']
        password1 = request.POST['password']

        user = auth.authenticate(username=username1, password=password1)

        if user is not None:
            auth.login(request, user)
            messages.success(request, f"welcome {username1}")
            return redirect('appofimage')
        else:
            messages.error(request, "not valid")
            return redirect('appofimage')

    return render(request, 'login.html')


def logout(request):
    if request.method == 'POST':
        messages.error(request, "Try again")
        return redirect('appofimage')

    else:
        auth.logout(request)
        messages.success(request, "logout successful")
        return redirect('appofimage')

регистрация. html

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

    <title>SignUp</title>
  </head>
  <body>




            <div class="container-md">

                <form action="" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                <label for="username">Username</label>
                <input type="text" class="form-control" name="username" id="username">
              </div>
                    <div class="form-group">
                <label for="firstname">First Name</label>
                <input type="text" class="form-control" name="firstname" id="firstname">
              </div>
                    <div class="form-group">
                <label for="lastname">Last Name</label>
                <input type="text" class="form-control" name="lastname" id="lastname">
              </div>
              <div class="form-group">
                <label for="email">Email address</label>
                <input type="email" class="form-control" name="email" id="email" aria-describedby="emailHelp">
                <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
              </div>
              <div class="form-group">
                <label for="password">Password</label>
                <input type="password" class="form-control" name="password" id="password">
              </div>
               <div class="form-group">
                <label for="password1">Confirm Password</label>
                <input type="password" class="form-control" name="password1" id="password1">
              </div>
              <button type="submit" class="btn btn-primary">Submit</button>
            </form>


            </div>


    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
  </body>
</html>

логин. html

<!doctype html>
    <html lang="en">
      <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
    
        <title>Login</title>
      </head>
      <body>
    
    
    
            <div class="container-md">
                  <form action="" method="post">
                      {% csrf_token %}
                      <div class="form-group">
                        <label>Username</label>
                        <input type="text" class="form-control" name="username">
                      </div>
                  <div class="form-group">
                    <label>Password</label>
                    <input type="password" class="form-control" name="password">
                  </div>
                  <button type="submit" class="btn btn-primary">Submit</button>
                </form>
    
            </div>
    
    
        <!-- Optional JavaScript -->
        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
      </body>
    </html>

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вам необходимо сделать следующее:

  • добавить представление, которое дает сообщения определенной категории. пример URL будет / category /
  • используйте html
<a href="/category/{{post.cat.pk}}">
    <img src="{{post.image.url}}">
</a>
0 голосов
/ 09 июля 2020

Сначала создайте URL-адреса категорий в urls.py:

urlpatterns = [
    ...
    path('/category/<int:pk>/', views.your_category_view, name="category"),
    ...
]

Затем ваши сообщения и ваши категории будут связаны друг с другом через ForeignKey в ваших моделях. Вам нужно использовать это в вашем l oop, чтобы получить правильную категорию для каждого изображения. В настоящее время вы звоните по номеру {{cat.pk}}, не перебирая кошек и не привязывая его к нужному изображению. Я бы заменил ваши изображения l oop (запутанный способ называть это, кстати, поскольку изображения на самом деле являются сообщениями) на это:

{% for i in images %}
    <div class="card">
        <a href="{% url 'category' i.cat.pk %}">
            <img src="/media/{{i.image}}" class="card-img-top img-fluid" width=auto" height="auto" alt="{{i.cat.cat_title}}"/>
        </a>
    </div>
{% endfor %}
...