<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在Django中創(chuàng)建自己的自定義用戶模型?

          共 5804字,需瀏覽 12分鐘

           ·

          2021-07-17 17:42

          本文將幫助大家在Django中創(chuàng)建自己的自定義用戶模型

          自定義用戶模型有什么需求?

          創(chuàng)建自己的自定義用戶模型至關(guān)重要。將來,如果要對模型進行一些更改,則可以輕松進行這些更改。不然我們可能必須對模型進行一些更改,而且代碼的某些部分也將被更改。在某些網(wǎng)站中,與用戶名相比,使用電子郵件進行登錄是有意義的。因此,對于程序員而言,擁有自定義用戶模型是一個好習(xí)慣。

          本文將幫助大家根據(jù)需要創(chuàng)建自己的自定義用戶模型。請繼續(xù)執(zhí)行以下步驟。

          1. Django 安裝

          2. 創(chuàng)建Django應(yīng)用

          3. 該應(yīng)用程序的自定義模型

          4. 遷移數(shù)據(jù)庫

          1. Django安裝

          設(shè)置Django之后,進入創(chuàng)建的環(huán)境。然后,我們可以通過以下命令創(chuàng)建Django項目。

          django-admin startproject mysite

          2.創(chuàng)建Django應(yīng)用

          如果發(fā)現(xiàn)某些網(wǎng)站使用了類似/ accounts /的URL,它們看起來就是專業(yè)代碼。因此,我們還需要創(chuàng)建一個名為accounts的應(yīng)用程序,在其中管理與該帳戶有關(guān)的所有事情。因此,在當前環(huán)境中,使用以下命令創(chuàng)建Django應(yīng)用。

          python manage.py startapp accounts

          創(chuàng)建后,該應(yīng)用將包含基本文件。創(chuàng)建的文件如下所示。

          accounts/
              __init__.py
              admin.py
              apps.py
              models.py
              tests.py
              views.py

          一旦創(chuàng)建,所有的數(shù)據(jù)庫模型代碼都應(yīng)該寫在models.py文件中。另外,不要忘記創(chuàng)建一個urls.py文件,該文件有助于通過帳戶應(yīng)用程序路由鏈接。創(chuàng)建完成后,讓我們進入根據(jù)我們的需求構(gòu)建自定義用戶模型的下一步。

          3.該應(yīng)用程序的自定義模型

          因此,為了創(chuàng)建自定義用戶模型,我們需要在models.py文件中寫下以下代碼,因為python使用對象來管理和訪問存儲在數(shù)據(jù)庫中的數(shù)據(jù)。下面提到了models.py文件的代碼。

          from django.db import models
          from django.contrib.auth.models import AbstractBaseUser , BaseUserManager
          import uuid


          class UserManager(BaseUserManager):
              def create_user(self, email, firstname, lastname, phone,password=None):
                  user = self.model(
                      email = self.normalize_email(email),
                      firstname = firstname,
                      lastname = lastname,
                      phone = phone,
                  )
                  user.set_password(password)
                  user.save(using = self._db)
                  return user

              def create_superuser(self, email,firstname,lastname,phone,password=None):
                  user = self.create_user(
                      email=email,
                      password=password,
                      firstname = firstname,
                      lastname = lastname,
                      phone = phone,
                  )
                  user.is_admin = True
                  user.is_staff = True
                  user.save(using=self._db)
                  return user

          class User(AbstractBaseUser):
              id = models.CharField(max_length=200, default=uuid.uuid4,unique=True,primary_key=True)
              email = models.EmailField(null=False, max_length=100,unique=True)
              firstname = models.CharField(null=False, max_length=100)
              lastname = models.CharField(null=False, max_length=100)
              phone = models.IntegerField(null=False,unique=True)
              date_joined = models.DateTimeField(auto_now=True)
              last_login = models.DateTimeField(auto_now=True)
              is_admin = models.BooleanField(default = False)
              is_active = models.BooleanField(default = True)
              is_staff = models.BooleanField(default = False)
              is_superuser = models.BooleanField(default = False)

              USERNAME_FIELD = 'email'
              REQUIRED_FIELDS = ['firstname','lastname','phone']

              objects = UserManager()

              def __str__(self):
                  return self.email + ", " + self.firstname
              
              def has_perm(self, perm, obj = None):
                  return self.is_admin

              def has_module_perms(self, app_label):
                  return True

          用戶類包含表的字段或結(jié)構(gòu),我們在其中獲取有關(guān)用戶的一些詳細信息以及其中的某些條件。為了管理User類,我們有UserManager,它將用于創(chuàng)建新用戶或超級用戶。就像我之前說的,這里的用戶名字段將被替換為電子郵件。它比用戶名字段更有意義。還提到了必填字段。通過使用電子郵件作為用戶名字段,它會自動將電子郵件字段添加為必不可少的字段。

          因此,通過UserManager,我們可以創(chuàng)建一個新的普通用戶和一個超級用戶。user.set_password()會將純文本密碼哈希為默認的哈希算法。Django將PBKDF2與SHA-256哈希一起使用,并具有密碼擴展機制。user.save()函數(shù)將使用字段和哈希密碼保存創(chuàng)建的用戶。創(chuàng)建自定義用戶模型很簡單。

          在這里需要注意,在創(chuàng)建模型之前不要遷移模型。在此之前,創(chuàng)建模型后,我們必須使用自定義模型更新Django設(shè)置文件,否則Django將使用其自己的預(yù)先實現(xiàn)的模型。只需在項目目錄中的settings.py文件中使用此代碼即可。

          AUTH_USER_MODEL = ‘a(chǎn)ccounts.User’

          設(shè)置好模型后,就該將模型遷移到數(shù)據(jù)庫了。

          4.遷移模型

          現(xiàn)在,我們準備通過將更改遷移到數(shù)據(jù)庫中來遷移自定義用戶模型。使用以下命令在當前環(huán)境中遷移并執(zhí)行該代碼。

          python manage.py makemigrations
          python manage.py migrate

          此命令將查找Django項目中的所有模型和模型中的更改。如果要專門為應(yīng)用程序進行遷移,可以使用以下命令進行。

          python manage.py makemigrations <app_name>
          python manage.py migrate <app_name>

          可以將<app_name>替換為帳戶,以僅在該應(yīng)用程序上進行更改。

          文章轉(zhuǎn)載:Python運維技術(shù)
          (版權(quán)歸原作者所有,侵刪)

          點擊下方“閱讀原文”查看更多

          瀏覽 15
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲综合成人在线 | 中国老太卖婬视频播放 | 老司机久久一区二区三区 | 国产福利网站 | 丁香五月激情啪啪啪 |