首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DJANGO -多用户

DJANGO -多用户
EN

Stack Overflow用户
提问于 2020-04-25 20:47:33
回答 2查看 2.9K关注 0票数 3

我正在用django构建一个平台,对于用户注册,我遵循了一些教程,在这一点上,我认为如果我可以添加一个“新用户注册”会更好。在我的案例中,“学生”可以注册,登录和导航平台,但我也想让一个新类型的用户(工作人员),他们可以注册为工作人员,登录和访问只有一个页面,他们可以创建一些新的测验。

我试着在网上找,但我不知道怎么做,因为我已经创建了。

你能给我一些关于如何解决这个问题的建议/资源吗?

帐户/Forms.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-25 21:54:58

基本上有两种方法来解决这个问题,这取决于问题的严重程度。

最简单和更容易的方法是简单地给一些用户访问管理区,并允许他们使用/admin区域和创建测验,如果你在admin.py中注册了你的测验模型,如果你走这条路,记住只给他们所需的权限,没有更多,你可以在管理区的用户部分做这件事。

第二种更严肃的方法是遵循这篇优秀的文章here的方法。如果你关注这篇文章,它似乎就是你想要的。对于测验创建表单和视图,您可以简单地创建一个受保护的视图,该视图要求用户是教师,如本文所示。

根据您的特定需求和用例(您信任员工吗?您预计会有多少人使用它?)我可能更倾向于第二种方法,因为允许最终用户访问您的管理区域是一种糟糕的做法,而且可能是一个安全漏洞。这确实需要你写更多的代码。希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2020-04-25 21:19:21

根据我对您问题的理解,您希望对用户进行身份验证,并相应地授予他们权限(授权)。我个人更喜欢使用JWT令牌进行身份验证:https://pypi.org/project/djangorestframework-simplejwt/

它易于实现,而且是一种安全的身份验证方法。Django提供了多种授权方式,您可以直接从文档开始:https://docs.djangoproject.com/en/3.0/topics/auth/default/#permissions-and-authorization

基本上,您将在登录/注册时验证用户的身份,然后根据角色授予某些权限。如果用户未通过身份验证,您将抛出401,如果用户未被授权执行某些任务,您将抛出403。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61425882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档