Django - регистрация пользователя и настройки профиля - PullRequest
0 голосов
/ 29 апреля 2020

Итак, мне удалось создать регистрацию и логин для пользователей. Я создал два вида групп, одна с ограничениями и одна без ограничений. В основном я буду управлять администратором в панели администратора, я добавлю пользователей в одну группу вместо другой, поэтому здесь нет проблем. Моя проблема в том, что когда новый пользователь регистрируется в моей панели администратора, он попадает только в мой раздел «Пользователи» и не будет автоматически связан с созданным мною «профилем пользователя» модели. Поэтому мне придется вручную добавить пользователя в «Модель». Как я могу сделать так, чтобы пользователь автоматически ассоциировался с этим классом, чтобы он / она настраивал свою фотографию профиля и т. Д.?

django panel

model

accounts / forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class FormRegistrazione(UserCreationForm):
    email = forms.CharField(max_length=30, required=True, widget=forms.EmailInput())

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

accounts / models.py

from django.db import models
from django.contrib.auth.models import User
# from django.db.models.signals import post_save
# from django.dispatch import receiver

class UserProfile(models.Model):
    user= models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=True)
    CV = models.FileField(null= True, blank=True)
    school = models.CharField(max_length=200, null=True)
    profile_photo = models.ImageField(null= True, blank=True)

    def __str__(self):
        return self.name

accounts / views.py

from django.shortcuts import render, HttpResponseRedirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from accounts.forms import FormRegistrazione
# from .decorators import allowed_user

# Create your views here.

def registrazioneView(request):
    if request.method == "POST":
        form = FormRegistrazione(request.POST)
        if form.is_valid():
            username = form.cleaned_data["username"]
            email = form.cleaned_data["email"]
            password = form.cleaned_data["password1"]
            User.objects.create_user(username=username, password=password, email=email)
            user = authenticate(username=username, password=password)
            login(request, user)
            return HttpResponseRedirect("/")


    else:
        form = FormRegistrazione()
    context = {"form": form}
    return render(request, 'accounts/registrazione.html', context)

core / views.py

from django.shortcuts import render, get_object_or_404
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.list import ListView
from .decorators import allowed_user


# Create your views here.
from quiz.models import Questions
from jobs.models import post_job
from functools import wraps





# @allowed_user(allowed_roles=['Admin', 'Students'])
def homepage(request):
    return render(request, 'core/homepage.html')

@allowed_user(allowed_roles=['Admin','Students'])
def userProfileView(request, username):
    user= get_object_or_404(User, username=username)
    jobs = post_job.objects.all()
    categories = Questions.CAT_CHOICES
    scores = []
    for category in categories:
        score = Questions.objects.filter(catagory=category[0], student= user).count()
        scores.append(score)

    context = {

    'user' : user, 'categories_scores' : zip( categories,scores),
    'jobs': jobs



    }
    return render(request, 'core/user_profile.html' , context)


class UserList(LoginRequiredMixin, ListView):
    model = User
    template_name = 'core/users.html'

core / decorators.py

from django.http import HttpResponse
from django.shortcuts import redirect, render
from functools import wraps
# def allowed_user(allowed_roles=[]):
#     def decorator(view_func):
#         def wrapper_func(request, *args, **kwargs):
#
#             group = None
#             if request.user.groups.exists():
#                 group = request.user.groups.all()
#
#             if group in allowed_roles:
#                 return view_func(request, *args, **kwargs)
#
#             else:
#                 return HttpResponse(' You are not Authorized!')
#         return wrapper_func
#     return decorator



def allowed_user(allowed_roles=()):
    def decorator(view_func):
        @wraps(view_func)
        def wrapper_func(request, *args, **kwargs):
            if request.user.groups.filter(name__in=allowed_roles).exists():
                return view_func(request, *args, **kwargs)
            else:

                 return render(request, 'core/render_staff.html' )

        return wrapper_func
    return decorator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...