欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用django自帶的user做外鍵的方法

 更新時間:2020年11月30日 10:42:01   作者:湯圓兒2019  
這篇文章主要介紹了使用django自帶的user做外鍵的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、使用django自帶的user做外鍵,可以直接在model中使用。只需導(dǎo)入settings模塊

使用方法:
在app應(yīng)用(此處是Product應(yīng)用)中的models.py文件,導(dǎo)入settings模塊

# Product / models.py
from django.db import models
from django.contrib.auth import settings


class Product(models.Model):
  productName = models.CharField('產(chǎn)品名稱', max_length=20)
  productDescription = models.CharField('產(chǎn)品描述', max_length=100)
  producer = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='負(fù)責(zé)人',             on_delete=models.SET_NULL,blank=True, null=True)
  createTime = models.DateTimeField('創(chuàng)建時間', auto_now=True)

  class Meta:
    verbose_name = '產(chǎn)品管理'
    verbose_name_plural = '產(chǎn)品管理'

  def __str__(self):
    return self.productName

在這里插入圖片描述

二、自定義User Model

方法一、擴(kuò)展AbstractUser類:只增加字段

app/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class NewUser(AbstractUser):
	new_field = models.CharField(max_length=100)

同時,需要在global_settings文件中設(shè)置:

AUTH_USER_MODEL = "app.NewUser"

方法二、擴(kuò)展AbstractBaseUser類
AbstractBaseUser中只包含3個field: password, last_login和is_active. 擴(kuò)展方式同上

# django.contrib.auth.base_user
class AbstractBaseUser(models.Model):
  password = models.CharField(_('password'), max_length=128)
  last_login = models.DateTimeField(_('last login'), blank=True, null=True)

  is_active = True

  REQUIRED_FIELDS = []

  # Stores the raw password if set_password() is called so that it can
  # be passed to password_changed() after the model is saved.
  _password = None

  class Meta:
    abstract = True

  def __str__(self):
    return self.get_username()

  def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
    if self._password is not None:
      password_validation.password_changed(self._password, self)
      self._password = None

  def get_username(self):
    """Return the username for this User."""
    return getattr(self, self.USERNAME_FIELD)

  def clean(self):
    setattr(self, self.USERNAME_FIELD, self.normalize_username(self.get_username()))

  def natural_key(self):
    return (self.get_username(),)

  @property
  def is_anonymous(self):
    """
    Always return False. This is a way of comparing User objects to
    anonymous users.
    """
    return False

  @property
  def is_authenticated(self):
    """
    Always return True. This is a way to tell if the user has been
    authenticated in templates.
    """
    return True

  def set_password(self, raw_password):
    self.password = make_password(raw_password)
    self._password = raw_password

  def check_password(self, raw_password):
    """
    Return a boolean of whether the raw_password was correct. Handles
    hashing formats behind the scenes.
    """
    def setter(raw_password):
      self.set_password(raw_password)
      # Password hash upgrades shouldn't be considered password changes.
      self._password = None
      self.save(update_fields=["password"])
    return check_password(raw_password, self.password, setter)

  def set_unusable_password(self):
    # Set a value that will never be a valid hash
    self.password = make_password(None)

  def has_usable_password(self):
    """
    Return False if set_unusable_password() has been called for this user.
    """
    return is_password_usable(self.password)

  def get_session_auth_hash(self):
    """
    Return an HMAC of the password field.
    """
    key_salt = "django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash"
    return salted_hmac(key_salt, self.password).hexdigest()

  @classmethod
  def get_email_field_name(cls):
    try:
      return cls.EMAIL_FIELD
    except AttributeError:
      return 'email'

  @classmethod
  def normalize_username(cls, username):
    return unicodedata.normalize('NFKC', username) if isinstance(username, str) else username

到此這篇關(guān)于使用django自帶的user做外鍵的方法的文章就介紹到這了,更多相關(guān)django user做外鍵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Python中f-string的幾個技巧,你都知道嗎

    在Python中f-string的幾個技巧,你都知道嗎

    f-string想必很多Python用戶都基礎(chǔ)性的使用過,但是百分之九十的人不知道?在Python中f-string的幾個技巧,今天就帶大家一起看看Python f-string技巧大全,需要的朋友參考下吧
    2021-10-10
  • pyspark創(chuàng)建DataFrame的幾種方法

    pyspark創(chuàng)建DataFrame的幾種方法

    為了便于操作,使用pyspark時我們通常將數(shù)據(jù)轉(zhuǎn)為DataFrame的形式來完成清洗和分析動作。那么你知道pyspark創(chuàng)建DataFrame有幾種方法嗎,下面就一起來了解一下
    2021-05-05
  • Python算法練習(xí)之二分查找算法的實現(xiàn)

    Python算法練習(xí)之二分查找算法的實現(xiàn)

    二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。本文將介紹python如何實現(xiàn)二分查找算法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2022-06-06
  • 詳解python多線程、鎖、event事件機(jī)制的簡單使用

    詳解python多線程、鎖、event事件機(jī)制的簡單使用

    這篇文章主要介紹了詳解python多線程、鎖、event事件機(jī)制的簡單使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Python基礎(chǔ)學(xué)習(xí)之反射機(jī)制詳解

    Python基礎(chǔ)學(xué)習(xí)之反射機(jī)制詳解

    在Python中,反射是指通過一組內(nèi)置的函數(shù)和語句,在運行時動態(tài)地訪問、檢查和修改對象的屬性、方法和類信息的機(jī)制。本文將通過簡單的示例和大家講講Python中的反射機(jī)制,希望對大家有所幫助
    2023-03-03
  • Python日期時間模塊datetime詳解與Python 日期時間的比較,計算實例代碼

    Python日期時間模塊datetime詳解與Python 日期時間的比較,計算實例代碼

    python中的datetime模塊提供了操作日期和時間功能,本文為大家講解了datetime模塊的使用方法及與其相關(guān)的日期比較,計算實例
    2018-09-09
  • 12個Python程序員面試必備問題與答案(小結(jié))

    12個Python程序員面試必備問題與答案(小結(jié))

    這篇文章主要介紹了12個Python程序員面試必備問題與答案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Python?OLS?雙向逐步回歸方式

    Python?OLS?雙向逐步回歸方式

    這篇文章主要介紹了Python?OLS?雙向逐步回歸方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 分析python并發(fā)網(wǎng)絡(luò)通信模型

    分析python并發(fā)網(wǎng)絡(luò)通信模型

    隨著互聯(lián)網(wǎng)和物聯(lián)網(wǎng)的高速發(fā)展,使用網(wǎng)絡(luò)的人數(shù)和電子設(shè)備的數(shù)量急劇增長,其也對互聯(lián)網(wǎng)后臺服務(wù)程序提出了更高的性能和并發(fā)要求。本文主要分析比較了一些模型的優(yōu)缺點,并且用python來實現(xiàn)
    2021-06-06
  • Python匿名函數(shù)及應(yīng)用示例

    Python匿名函數(shù)及應(yīng)用示例

    這篇文章主要介紹了Python匿名函數(shù)及應(yīng)用,結(jié)合實例形式分析了Python匿名函數(shù)的功能、定義及函數(shù)作為參數(shù)傳遞的相關(guān)應(yīng)用操作技巧,需要的朋友可以參考下
    2019-04-04

最新評論