چگونه uuid را مدل ایجاد کنیم
در مدل جنگو برای آنکه به جای id که مقداری primary استفاده کنیم میتوانیم از uuid استفاده کنیم که کلیدی تصادفی است که براساس زمان سیستم و MAC و سخت افزار سیستم شما ساخته میشود این کد باعث میشود که در آدرس سایت اعداد ID که پشت سرهم هستند ظاهر نشوند و نشود با اضافه کردن مقداری به URL شما باعث ایجاد دسترسی به دادهای حساس شما باشد.
برای این کار کافیه در مدل فیلد آنرا اضافه کنید
123import uuid from django.db import models class MyUUIDModel(models.Model):
1 id = models.UUIDField(
1 primary_key = True,
1 default = uuid.uuid4,
1 editable = False)
1 # other fields
خب خیلی راحت بود ولی اگر بخواهید از مدل قدیمی استفاده کنید به این مسله بر میخورید که چطور این فیلد را اضافه کنید اگر به صورت دستی اضافه کنید مشکلی اساس در MIGRATE خواهید داشت UUID فیلدهای NULL که دیتابیس شما را دچار مشکل میکند. راه حل چیه ؟
این خط را به MIGRATION خود اضافه کنید
1def create_uuid(apps, schema_editor):
1Device = apps.get_model('device_app', 'Device')
1 for device in Device.objects.all():
123device.uuid = uuid.uuid4() device.save()
123456789101112131415161718192021222324252627282930313233# -*- coding: utf-8 -* from __future__ import unicode_literals from django.db import migrations, models import uuid def create_uuid(apps, schema_editor): Device = apps.get_model('device_app', 'Device') for device in Device.objects.all(): device.uuid = uuid.uuid4() device.save() class Migration(migrations.Migration): dependencies = [ ('device_app', 'XXXX'), ] operations = [ migrations.AddField( model_name='device', name='uuid', field=models.UUIDField(blank=True, null=True), ), migrations.RunPython(create_uuid), migrations.AlterField( model_name='device', name='uuid', field=models.UUIDField(unique=True) ) ]