ホームページ > データベース > mysql チュートリアル > Django の自動インクリメント主キーを、特定のモデル用の一意の安全な整数 ID に置き換えるにはどうすればよいですか?

Django の自動インクリメント主キーを、特定のモデル用の一意の安全な整数 ID に置き換えるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-26 02:41:09
オリジナル
626 人が閲覧しました

How Can I Replace Django's Auto-Incrementing Primary Key with a Unique, Secure Integer ID for Specific Models?

Django の主キーを特定のテーブルの一意の整数に置き換えます

Django では、主キーは通常、自動インクリメントされる正の整数です。これは実際的なデフォルトとして機能しますが、データベース内の多数のエンティティが公開されるため、プライバシーが侵害される可能性があります。この問題に対処するには、特定の要件に準拠したカスタマイズされたソリューションが必要です。

要件

  • 主キー フィールドの型を整数として保持します。
  • パフォーマンスのオーバーヘッドを最小限に抑えるレコード挿入時に主キーを 1 回だけハッシュします。
  • 不可逆ハッシュを使用します。アルゴリズム。
  • グローバルではなく、特定のテーブル内での一意性を確保します。
  • 長い URL を避けるために、ハッシュ値を簡潔にしてください。

アプローチ: タイムスタンプ ベースの ID 生成

Instagram で使用されているアプローチに触発された、適切なソリューションは、タイムスタンプとランダム ビットの組み合わせにより、一時的プロパティと一意のプロパティの両方を提供します。

コードの実装

ID 生成:

START_TIME = a constant representing a Unix timestamp.

def make_id():
    t = int(time.time() * 1000) - START_TIME
    u = random.SystemRandom().getrandbits(23)
    id = (t << 23) | u
    return id
ログイン後にコピー

モデル定義:

class MyClass(models.Model):
    id = models.BigIntegerField(default=make_id, primary_key=True)
ログイン後にコピー

このアプローチは、質問で概説されている特定の要件に対処しながら、一意の主キーを生成する安全かつ効率的な方法。さらに、reverse_id メソッドを実装して ID から作成時刻を取得できるため、追加のフィールドが不要になる可能性があります。

以上がDjango の自動インクリメント主キーを、特定のモデル用の一意の安全な整数 ID に置き換えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート