سلام مهاجرت یکی از بخش ها و بحث های بنیادی در برنامه نویسی تحت وب با جنگو است. مهاجرت مربوط به توسعۀ مدل های مربوط به برنامه در شرایطی می شود که بعد از توسعۀ مدل ها، به صورت خودکار دیتابیس نیز خود را با مدل ها بروز رسانی کند …
سلام در این قسمت می خواهیم APIهای مدل ها را واکاوی کنیم. در ابتدا قصد داریم ویوی مربوط به صفحۀ اصلی را بهبود بخشیم. باید سه قسمت را درست کنیم. نمایش تعداد پست های ارسالی در یک بورد. نمایش تعداد تاپیک های ارسالی در یک بورد. نمایش آخرین کاربری که …
سلام در این قسمت می خواهیم برای ارسال پاسخ به یک پست مشخص، ویوی جدید بسازیم. یک آدرس جدید اضافه می کنیم. myproject/urls.py
۱ |
url(r'^boards/(?P<pk>\d+)/topics/(?P<topic_pk>\d+)/reply/$', views.reply_topic, name='reply_topic'), |
یک فرم جدید برای پاسخ به پست می سازیم. boards/forms.py (مشاهده کد کامل)
۱ ۲ ۳ ۴ ۵ ۶ ۷ |
from django import forms from .models import Post class PostForm(forms.ModelForm): class Meta: model = Post fields = ['message', ] |
ویوی جدید توسط login_required@ محافظت می شود. boards/views.py (مشاهده کد کامل)
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ |
from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, redirect, render from .forms import PostForm from .models import Topic @login_required def reply_topic(request, pk, topic_pk): topic = get_object_or_404(Topic, board__pk=pk, pk=topic_pk) if request.method == 'POST': form = PostForm(request.POST) if form.is_valid(): post = form.save(commit=False) post.topic = topic post.created_by = request.user post.save() return redirect('topic_posts', pk=pk, topic_pk=topic_pk) else: form = PostForm() return render(request, 'reply_topic.html', {'topic': topic, 'form': form}) |
…
سلام براساس شمای کلی و وایرفریم زیر می خواهیم صفحه ای را بسازیم که در آن تمام پست های یک تاپیک به نمایش درآید. اول از همه باید یک سری مسیر به برنامه اضافه کنیم. myproject/urls.py
۱ |
url(r'^boards/(?P<pk>\d+)/topics/(?P<topic_pk>\d+)/$', views.topic_posts, name='topic_posts'), |
همانطور که معلوم است در آدرس دهی بالا، از دو آرگومان استفاده کرده …
سلام خوب! حالا وقت آن رسیده که در ویوی new_topic نام کاربر واردشده به سیستم را تنظیم کنیم. (در حال حاضر صرفاً نام اولین کاربر از دیتابیس گرفته و نمایش داده می شود.) boards/views.py (مشاهده کد کامل)
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ |
from django.contrib.auth.decorators import login_required from django.shortcuts import get_object_or_404, redirect, render from .forms import NewTopicForm from .models import Board, Post @login_required def new_topic(request, pk): board = get_object_or_404(Board, pk=pk) if request.method == 'POST': form = NewTopicForm(request.POST) if form.is_valid(): topic = form.save(commit=False) topic.board = board topic.starter = request.user # <- here topic.save() Post.objects.create( message=form.cleaned_data.get('message'), topic=topic, created_by=request.user # <- and here ) return redirect('board_topics', pk=board.pk) # TODO: redirect to the created topic page else: form = NewTopicForm() return render(request, 'new_topic.html', {'board': board, 'form': form}) |
با اضافه کردن یک تاپیک می توانیم برنامۀ خود را تست کنیم. …
سلام مثل همیشه نوبت نوشتن فایل تست مربوط به دکوراتور login_required@ شده اما قبل از آن می خواهیم فایل boards/tests/test_views.py را اندکی دستکاری کنیم. می خواهیم این فایل را به سه فایل جداگانه تقسیم کنیم. test_view_home.py شامل کلاس HomeTests (مشاهده کد کامل) test_view_board_topics.py شامل کلاس BoardTopicsTests (مشاهده کد کامل) test_view_new_topic.py …
سلام در این بخش باید از دسترسی کاربران غیرمجاز به ویوها جلوگیری کنیم. برای مثال فرم زیر برای ارسال پست جدید به کار می رود: در تصویر بالا، کاربری وارد سیستم نشده اما توانسته به فرم ارسال پست دسترسی پیدا کند. جنگو برای جلوگیری از این موضوع به صورت پیشفرض …
سلام در این فصل نحوۀ تعیین سطح دسترسی برای کاربران معتبر به فرم ها و ویوها را به شکل اصولی کار می کنیم و بعد از آن پست های یک تاپیک را به صورت لیستی نمایش می دهیم. در انتها برخی از ویژگی های Django ORM را مرور می کنیم. …