DJANGO - несколько пользователей - PullRequest
3 голосов
/ 25 апреля 2020

Я строю платформу в django, и для регистрации пользователя я следовал нескольким учебникам, на данный момент, я думаю, было бы лучше, если бы я мог добавить «регистрацию нового пользователя». В моем случае «студенты» могут зарегистрироваться, войти в систему и перемещаться по платформе, но я также хотел бы создать новый тип пользователей (сотрудников), где они могут зарегистрироваться как сотрудники, войти в систему и посетить только одну страницу, где они могут создать какую-то новую викторину.

Я пытался посмотреть в Интернете, но я не могу понять, как это сделать с того момента, который я уже создал.

Не могли бы вы дать мне несколько советов / ресурсов о том, как я могу решить эта проблема?

account / 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']

account / 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

# 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

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





def homepage(request):
    return render(request, 'core/homepage.html')

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(category=category[0], student= request.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'

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

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

Самый простой и легкий способ - просто предоставить некоторым пользователям доступ к административной области и разрешить им использовать область / admin и создавать Тесты там, при условии, что вы зарегистрировали свою модель Викторины в admin.py, если вы go этот маршрут не забыли предоставить им только необходимые разрешения и не более, вы можете сделать это в административной области в пользовательском разделе.

Второй, более серьезный способ - это подход, за которым следует отличная статья здесь . Если вы следите за статьей, кажется, это именно то, что вы хотите. Для формы создания и просмотра теста вы можете просто создать защищенное представление, которое требует, чтобы пользователь был учителем, как показано в статье.

В зависимости от ваших конкретных потребностей c и варианта использования (доверяете ли вы сотрудникам? «Сколько людей вы ожидаете его использовать?» Я бы, вероятно, больше склонялся ко второму подходу, поскольку предоставление конечным пользователям доступа к вашей административной области является плохой практикой и может быть уязвимостью безопасности. Это требует от вас писать больше кода, хотя. Надеюсь, это поможет.

0 голосов
/ 25 апреля 2020

Из того, что я понимаю из вашего вопроса, вы хотите аутентифицировать пользователей и дать им разрешения (авторизацию) соответственно. Я лично предпочитаю использовать токены JWT для аутентификации: https://pypi.org/project/djangorestframework-simplejwt/

Это простой в использовании и безопасный способ аутентификации. Django предлагает несколько способов авторизации, вы можете начать с документации напрямую: https://docs.djangoproject.com/en/3.0/topics/auth/default/#permissions -и-авторизация

По сути, вы будете аутентифицировать пользователей при входе в систему / регистрации на предмет их личности. а затем дает определенные разрешения в зависимости от роли. Если пользователь не аутентифицирован, вы выбросите 401, а если пользователь не авторизован для выполнения определенной задачи, вы выбросите 403.

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