Django Профиль проекта - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть типичный сценарий, в котором я хочу создать регистрационную форму, где каждый может вставить имя, фамилию, идентификатор электронной почты, имя пользователя, пароль (который может быть сохранен в таблице пользователей, предоставленной Django), био и профиль Изображение (которое не может быть сохранено в таблице пользователей, предоставленной Django)

и после регистрации, когда пользователь пытается войти в систему с именем пользователя и паролем, он может просмотреть свои данные и обновить их.

Я выполнил регистрационную часть с помощью отношений OneToOne с таблицей пользователей, но возникли проблемы с просмотром и обновлением. Помогите мне с Django кодом.

Models.py

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    work = models.CharField(max_length=120,null=True)
    bio = models.TextField(null=True)
    profile_picture = models.ImageField(upload_to="Profile Pictures",null=True)
    def __str__(self):
        return self.user.username

логин. html

<form action="" method="POST">
                        {% csrf_token %}
                      <div class="modal-body">
                        <div class="md-form form-sm mb-5">
                          <i class="fas fa-user prefix fb-text   "></i>
                          <input type="text" name="username" class="form-control form-control-sm validate" required>
                          <label data-error="wrong" data-success="right" for="username">Your Username</label>
                        </div>

                        <div class="md-form form-sm mb-5">
                          <i class="fas fa-envelope prefix fb-text"></i>
                          <input type="email" name="email" class="form-control form-control-sm validate" required>
                          <label data-error="wrong" data-success="right" for="email">Your email</label>
                        </div>

                        <div class="md-form form-sm mb-5">
                          <i class="fas fa-envelope prefix fb-text"></i>
                          <input type="text" name="work" class="form-control form-control-sm validate" required>
                          <label data-error="wrong" data-success="right" for="work">Your Work</label>
                        </div>

                        <div class="md-form form-sm mb-5">
                          <i class="fas fa-lock prefix fb-text"></i>
                          <input type="password" name="password1" class="form-control form-control-sm validate" minlength="8" required>
                          <label data-error="wrong" data-success="right" for="password1" >Your password</label>
                        </div>

                        <div class="md-form form-sm mb-4">
                          <i class="fas fa-lock prefix fb-text"></i>
                          <input type="password" name="password2" class="form-control form-control-sm validate" minlength="8" required>
                          <label data-error="wrong" data-success="right" for="password2">Repeat password</label>
                        </div>

                        <div class="text-center form-sm mt-2">
                          <button type="submit" class="btn btn-fb-text">Sign up <i class="ml-1 fas fa-sign-in-alt    "></i></button>
                        </div>
                      </div>
                    </form>

views.py

def login(request):
    if request.method=="GET":
        if request.user.is_authenticated:
            return redirect("/")
        else:
            return render(request,"login.html")
    else:
        if "email" in request.POST:
            username=request.POST["username"]
            email = request.POST["email"]
            work = request.POST["work"]
            password1 = request.POST["password1"]
            password2 = request.POST["password2"]   
            if password1 != password2:
                messages.error(request,"Passwords Doesn't Match",extra_tags="bg-danger")
            elif User.objects.filter(username=username).exists():
                messages.info(request,"Username Already Taken",extra_tags="bg-info")
            elif User.objects.filter(email=email).exists():
                messages.error(request,"Already Registered",extra_tags="bg-danger")
            else:
                user = User.objects.create_user(username=username,email=email,password=password1)
                user.save()
                profile = UserProfile()
                profile.work= work
                profile.user= user
                profile.save()
                messages.success(request,"Registered Successfully",extra_tags="bg-success")
            return redirect("/login")
        else:
            username=request.POST["username"]
            password = request.POST["password"]
            user = auth.authenticate(username=username,password=password)
            if user is not None:
                messages.success(request,"Login Successfully",extra_tags="bg-success")
                auth.login(request,user)
                return redirect("/")
            else:
                messages.error(request,"Invalid Credentials",extra_tags="bg-danger")
                return redirect("/login")

...