电子邮件,登录,注销身份验证问题

时间:2020-07-09 07:29:34

标签: python css django django-forms django-templates

我想让用户输入与其他用户相同的用户名而不显示与电子邮件和登录功能相同的错误如何添加电子邮件验证...不是用户名,请检查我的注销功能是对还是错。谢谢

  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')

signup.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>

login.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 :(得分:0)

首先,在urls.py中创建类别网址:

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

然后,您的帖子和类别通过模型中的ForeignKey链接在一起。您需要在循环中使用它来获取每个图像的正确类别。当前,您在呼叫{{cat.pk}}时不会在猫身上循环,也不会将其链接到正确的图像。我将用以下代码替换您的图片循环(由于图片实际上是帖子,因此将其称为btw的混淆方法):

{% 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 %}

答案 1 :(得分:0)

您需要执行以下操作:

  • 添加一个视图,以提供特定类别的帖子。示例网址将为/ category /
  • 使用html
<a href="/category/{{post.cat.pk}}">
    <img src="{{post.image.url}}">
</a>