Django认证系统 - 初学者教程

113 阅读3分钟

编码员们好。

本教程旨在帮助初学者适应Django框架,特别是这个神奇的框架所提供的 "开箱即用 "的**认证系统**。对于新手来说,Django是一个开源的网络框架,由经验丰富的开发人员在许多开源爱好者的帮助下设计并积极支持。

谢谢你的阅读!- 内容由**App Generator**提供。

本教程涵盖的主题

  • 用户--用于管理认证信息的核心实体
  • 如何使用Django CLI创建一个新用户
  • 如何创建一个超级用户
  • 使用UI(表单、控制器、视图)创建一个用户

用户模型

正如Django官方文档中提到的,用户模型代表了用于保存和管理认证的核心实体。User 模型所管理的字段可以在下面找到。

Django Authentication System - User model fields.

在Django中创建一个新用户的最简单方法可能是使用CLI(Django shell)。如果你还没有一个Django项目,可以随时克隆AppSeed团队提供的一个开源样本来解释许多Django概念。

$ git clone https://github.com/app-generator/django-learn-by-coding.git
$ cd django-learn-by-coding

创建一个虚拟环境 - 基于Linux的系统

$ virtualenv env
$ source env/bin/activate 

对于Windows系统,语法是不同的。

$ virtualenv env
$ .\env\Scripts\activate 

安装Django

$ pip install django

创建用户 - Django CLI

使用终端的用户创建过程通常与允许我们访问管理部分的superuser 。对于新手来说,admin 部分管理着我们项目中定义的注册用户、组。

$ # We are in the ROOT of the project
$ python manage.py createsuperuser
sername (leave blank to use 'test'): admin
Email address: test@appseed.us
Password: ********
Password (again): ********
Superuser created successfully. 

一旦superuser 管理员被创建,我们就可以访问admin 部分,并与我们项目注册的所有模型进行交互。让我们使用Django CLI来探索用户。

>>> from django.contrib.auth.models import User 
>>> User.objects.all()                         
<QuerySet [<User: admin>]>

使用CLI,我们可以探索所有的属性,当然也可以更新字段。

创建一个新的(普通)用户

>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('test', 'test@appseed.us', 'Super_S3cret111')

我们可以看到,使用User模型提供的create-user helper可以很容易地创建新的用户--让我们再次检查终端中的所有注册用户。

>>> >>> User.objects.all()         
<QuerySet [<User: admin>, <User: test>]>

通过用户界面创建用户

使用控制台来创建和管理用户可能很有趣,但在我们的项目中可能也很有用,允许用户使用公共网页来注册自己。要做到这一点,我们需要一个简单的页面来暴露表单,并需要一个后端来处理发送给用户的信息。

创建注册表格

class SignUpForm(UserCreationForm):
    username = forms.CharField(
        widget=forms.TextInput(
            attrs={
                "placeholder" : "Username"
            }
        ))
    email = forms.EmailField(
        widget=forms.EmailInput(
            attrs={
                "placeholder" : "Email"
            }
        ))
    password1 = forms.CharField(
        widget=forms.PasswordInput(
            attrs={
                "placeholder" : "Password"
            }
        ))
    password2 = forms.CharField(
        widget=forms.PasswordInput(
            attrs={
                "placeholder" : "Password check"
            }
        ))

创建控制器

def register_user(request):

    # A user-friendly message 
    msg = None

    # User submits the credentials 
    if request.method == "POST":

        # Initialize the from POST data
        form = SignUpForm(request.POST)

        # Check all constraints (one line)
        if form.is_valid():

            # Create the user
            form.save()

            msg     = 'User created successfully.'

        else:
            msg = 'Form is not valid'    

    # Show the SignUp Page 
    else:
        form = SignUpForm()

    return render(request, "accounts/register.html", {"form": form, "msg" : msg })

显示表单并邀请用户注册的页面

<form role="form" method="post" action="">

    {% csrf_token %}                    

    <div>
        {{ form.username }}
    </div>
    <span class="text-error">{{ form.username.errors }}</span>

    <div>
        {{ form.email }}
    </div>
    <span class="text-error">{{ form.email.errors }}</span>

    <div>
        {{ form.password1 }}
    </div>
    <span class="text-error">{{ form.password1.errors }}</span>

    <div>
        {{ form.password2 }}
    </div>
    <span class="text-error">{{ form.password2.errors }}</span>

    <button type="submit" name="register">Register</button>

</form>

用户注册机制

  • 用户看到注册页面
  • 用户输入所有字段
  • 提交表单,控制器收到所有信息(用户名,密码)。
  • 如果表格是有效的,表格被保存,用户被创建
  • 一个确认信息被返回给用户

上面的例子使用一个表单来创建用户,但我们也可以更新代码,使用create-user 方法。

def register_user(request):

    # A user-friendly message 
    msg = None

    # User submits the credentials 
    if request.method == "POST":

        # Initialize the from POST data
        form = SignUpForm(request.POST)

        # Check all constraints (one line)
        if form.is_valid():

            username     = form.cleaned_data.get("username")  # <-- UPDATED      
            email        = form.cleaned_data.get("email")     # <-- UPDATED 
            raw_password = form.cleaned_data.get("password1") # <-- UPDATED

            # Create user: UPDATED
            new_user = User.objects.create_user(username, email, raw_password)

            msg     = 'User created successfully.'

        else:
            msg = 'Form is not valid'    

    # Show the SignUp Page 
    else:
        form = SignUpForm()

    return render(request, "accounts/register.html", {"form": form, "msg" : msg })

谢谢你的阅读!欢迎在评论区发表AMA。更多资源,请访问。

  • 阅读更多关于Django的信息(官方文档)
  • 使用可开发的Django启动器快速启动一个新项目