همیشه برنامهنویس ولی یه برنامهنویس متن باز عاشق پایتون جنگو و تحلیل داده
چگونه uuid را مدل ایجاد کنیم
در مدل جنگو برای آنکه به جای id که مقداری primary استفاده کنیم میتوانیم از uuid استفاده کنیم که کلیدی تصادفی است که براساس زمان سیستم و MAC و سخت افزار سیستم شما ساخته میشود این کد باعث میشود که در آدرس سایت اعداد ID که پشت سرهم هستند ظاهر نشوند و نشود با اضافه کردن مقداری به URL شما باعث ایجاد دسترسی به دادهای حساس شما باشد.
برای این کار کافیه در مدل فیلد آنرا اضافه کنید
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(
primary_key = True,
default = uuid.uuid4,
editable = False)
# other fields
خب خیلی راحت بود ولی اگر بخواهید از مدل قدیمی استفاده کنید به این مسله بر میخورید که چطور این فیلد را اضافه کنید اگر به صورت دستی اضافه کنید مشکلی اساس در MIGRATE خواهید داشت UUID فیلدهای NULL که دیتابیس شما را دچار مشکل میکند. راه حل چیه ؟
این خط را به MIGRATION خود اضافه کنید
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()
# -*- 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)
)
]
مطلبی دیگر از این انتشارات
آموزش پایتون - فصل اول (مقدمات)
مطلبی دیگر از این انتشارات
پنج نکته که پس از حل کردن 500 سوال لیتکد آموختم
مطلبی دیگر از این انتشارات
مدلهای کسبوکار عظیمداده(2)