مهاجرت

سلام

مهاجرت یکی از بخش ها و بحث های بنیادی در برنامه نویسی تحت وب با جنگو است. مهاجرت مربوط به توسعۀ مدل های مربوط به برنامه در شرایطی می شود که بعد از توسعۀ مدل ها، به صورت خودکار دیتابیس نیز خود را با مدل ها بروز رسانی کند و با برنامه همخوانی داشته باشد.

زمانی که فرمان python manage.py migrate را اجرا می کنیم؛ جنگو تمام فایل های مهاجرت را گرفته و شمای دیتابیس را ایجاد می کند. جنگو برای انجام مهاجرت از یک جدول به خصوص استفاده می کند که با نام django_migrations شناخته می شود. جنگو در این جدول تمام مهاجرت های پذیرفته شده را ثبت می کند.

اگر سعی کنیم دوباره دستور بالا را اجرا کنیم؛ جنگو متوجه می شود که به آخرین تغییرات مهاجرت کرده و بنابراین کار جدیدی انجام نمی دهد.

python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, boards, contenttypes, sessions
Running migrations:
  No migrations to apply.

بیایید یک فیلد جدید را به مدل تاپیک اضافه و سپس مهاجرت کنیم.

boards/models.py (مشاهده کد کامل)

class Topic(models.Model):
    subject = models.CharField(max_length=255)
    last_updated = models.DateTimeField(auto_now_add=True)
    board = models.ForeignKey(Board, related_name='topics')
    starter = models.ForeignKey(User, related_name='topics')
    views = models.PositiveIntegerField(default=0)  # <- here

    def __str__(self):
        return self.subject

در اینجا فیلد PositiveIntegerField را اضافه کرده ایم. قرار است این فیلد تعداد بازدیدهای صفحه را درون خود ذخیره کند.

قبل از اینکه بخواهیم در برنامۀ خود از این فیلد استفاده کنیم؛ ضروری است تا شمای دیتابیس خودمان را بروزرسانی کنیم.

python manage.py makemigrations

Migrations for 'boards':
  boards/migrations/0003_topic_views.py
    - Add field views to topic

دستور makemigrations به صورت خودکار فایل ۰۰۰۳_topic_views.py را ایجاد می کند. از  این فایل برای تغییر دیتابیس و اضافه کردن فیلد ویو استفاده می شود.

حالا به جنگو می گوییم که مهاجرت را آغاز و اعمال کند.

python manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, boards, contenttypes, sessions
Running migrations:
  Applying boards.0003_topic_views... OK

حالا می توانیم از این فیلد برای پیگیری تعداد بازدیدهای یک صفحه استفاده کنیم.

boards/views.py (مشاهده کد کامل)

from django.shortcuts import get_object_or_404, render
from .models import Topic

def topic_posts(request, pk, topic_pk):
    topic = get_object_or_404(Topic, board__pk=pk, pk=topic_pk)
    topic.views += 1
    topic.save()
    return render(request, 'topic_posts.html', {'topic': topic})

 

templates/topics.html (مشاهده کد کامل)

{% for topic in topics %}
  <tr>
    <td><a href="{% url 'topic_posts' board.pk topic.pk %}">{{ topic.subject }}</a></td>
    <td>{{ topic.starter.username }}</td>
    <td>{{ topic.replies }}</td>
    <td>{{ topic.views }}</td>  <!-- here -->
    <td>{{ topic.last_updated }}</td>
  </tr>
{% endfor %}

حالا یک تاپیک را باز کرده و چند بار آن صفحه را رفرش می کنیم. همانطور که مشاهده می شود با هر بار فروش به تعداد بازدیدهای صفحه افزوده میی شود.

در اینجا به پایان فصل ششم می رسیم. شما می توانید کد های مربوط به این فصل را از آدرس زیر دانلود کنید :)

http://tamadon.net/python/code/520-django-beginners-guide-part6.zip

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: فصل بعدی: استراتژی ویوهای مبتنی بر کلاس

مطلب قبلی: QuerySets

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگو شرکت کنید؟
نظری بدهید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *