من همیشه می خواستم بعد از چند سال پیش که Flask را امتحان کردم، جنگو را تجربه کنم. پس از چند آزمایش اولیه برای ساختن یک ابزار جستجو برای مزارع خورشیدی (باطن جنگو، پیشانتخاب واکنش)، من فکر میکنم جنگو یک انتخاب بهینه برای ساخت سریع API از مدلهای داده است. با PostgreSQL و برنامه های کاربردی مبتنی بر پایگاه داده عالی کار می کند.
در زیر یک cheatsheet است که من هنگام ساختن برنامه آزمایشی خود گردآوری کردم – امیدوارم مفید باشد و به من اطلاع دهید که چه چیزی کم است!
زمینه
جنگو یک چارچوب وب مبتنی بر پایتون است که از الگوی Model-View-Template پیروی می کند، که در آن:
Model رابط به داده های شما است. ساختار منطقی پشت برنامه و نشان داده شده توسط یک DB
View رابط کاربری است. هر آنچه که مرورگر شما از طریق HTML/CSS/JS ارائه می دهد
Template فایلی است که ساختار یا چیدمان رابط کاربری را تعریف می کند
به طور کلی، جنگو به عنوان سریع، ایمن، مقیاسپذیر شناخته میشود و با باتریهایی همراه است (تأیید هویت کاربر، مدیریت محتوا و غیره). این توسط ناشران روزنامه مانند واشنگتن پست، پیاز، NYT و برنامه هایی مانند فایرفاکس، کلاب هاوس، اینستاگرام، پینترست، ایونتبریت، دورداش و رابینهود استفاده می شود.
چارچوب Django REST ساخت CRUD API را بسیار آسان می کند. چون از دیدگاههای کلاسی جنگو پیروی میکند، سریالسازی را آسانتر میکند. به طور کلی، یک جعبه ابزار عالی برای ساختن API های RESTful.
Cheatsheet & Snippets
راه اندازی و نصب
یک محیط مجازی ایجاد کنید
python3 -m venv <name>
venv را فعال کنید
source venv/bin/activate
django را نصب کنید
pip install django
یک پروژه ایجاد کنید
django-admin startproject <name> .
یک برنامه در پروژه ایجاد کنید
django-admin startapp <name>
به یاد داشته باشید که پس از ایجاد برنامه، آن را به فایل settings.py در زیر INSTALLED_APPS اضافه کنید
سرور، migration و غیره را اجرا کنید
سرور را راه اندازی کنید
python3 manage.py runserver
migration را ایجاد کنید
python3 manage.py makemigrations
مهاجرت را اجرا کنید
python3 manage.py migrate
توجه: همیشه پس از ایجاد تغییرات در مدلهای داده، makemigrations و سپس migrate را اجرا کنید
ادمین جنگو
کنسول مدیریت برای بررسی داده ها، کاربران، apis و غیره خوب است. معمولاً در localhost:8000/admin
نیاز به ایجاد یک لاگین برای کنسول مدیریت:
python3 manage.py createsuperuser
میتوانید با بهروزرسانی فایل admin.py، کنسول مدیریت را سفارشی کنید
مدل های داده
1.هنگامی که مدل های جدید ایجاد می کنید
2.مدل ها را در models.py تعریف کنید
3.سریال ساز را در serializers.py به روز کنید
آنها را در admin.py ثبت کنید. فایل admin.py باید بهروزرسانی شود تا مدلهای جدید در کنسول مدیریت نمایش داده شوند.
نمونه ای از روابط یک به چند: کتابی با شخصیت های متعدد
«کودک» مانند شخصیت های یک کتاب، باید از طریق کلید خارجی به والدین اشاره کند:
book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='characters')
وقتی مدلها را از یک دایرکتوری وارد میکنید، ممکن است مجبور شوید از .models import … انجام دهید تا از import models …
برای گزینه های فیلد برای مدل های داده اینجا را ببینید.
چارچوب Django REST (DRF)
نصب و راه اندازی:
pip install djangorestframework
rest_framework را به لیست INSTALLED_APPS در settings.py اضافه کنید
برای به دست آوردن یک نشانه تأیید، http://localhost:8000/auth/ (POST) را با پارامترهای نام کاربری و رمز عبور برای یک کاربر خاص ضربه بزنید. برای تنظیم مجوزها، این را به settings.py اضافه کنید
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}این را به نمای مجموعه در views.py اضافه کنید: authentication_classes = (TokenAuthentication، )
به این ترتیب، تنها افرادی که دارای یک توکن احراز هویت هستند می توانند داده ها را ببینند.
ثبت نماهای DRF به عنوان نقاط پایانی
در DRF انواع مختلفی از نماها وجود دارد. پرکاربردترین آنها عبارتند از:
نماهای مبتنی بر کلاس که کلاس APIView را گسترش می دهد
ModelViewSet
نماهای عمومی که از نزدیک به مدلهای DB نگاشت میشوند، که در بالای APIViws ساخته شدهاند
اطلاعات بیشتر در مورد نماهای DRF در اینجا
ModelViewSet
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializerAPIView
به طور معمول GET، POST را بر اساس پرس و جو دریافتی مدیریت می کند. برای مثال، برای ایجاد نمای نویسنده بر اساس جدول Books:
نویسندگان کلاس (APIView):
class Authors(APIView):
renderer_classes = [JSONRenderer]
# return all the unique authors of books
def get(self, request):
authors = Books.objects.order_by().values('author').distinct()
return Response(states)در api/urls.py، دو View به طور متفاوتی ثبت می شوند. یکی از طریق روتر، دیگری در مسیر (زیرا نمی توانید نماهای عمومی را در روترها اضافه کنید)
from django.urls import path, include
from rest_framework import routers
from .views import BookViewSet, Authors
router = routers.DefaultRouter()
# ModelViewSet
router.register('books', BookViewSet)
urlpatterns = [
path('', include(router.urls))
# APIView
path('authors/', Authors.as_view(), name="authors")
]CORS
برای اجازه دادن به یک برنامه frontend برای درخواست API در جنگو لازم است
نصب django-cors-headers: https://github.com/adamchainz/django-cors-headers
settings.py INSTALLED_APPS را به روز کنید و آن را به MIDDLEWARE اضافه کنید
همچنین CORS_ALLOWED_ORIGINS را در settings.py اضافه کنید، که باید علاوه بر لوکال هاست، آدرس برنامه frontend را نیز شامل شود.
پایگاه داده
پیش فرض sqlite است. برای تغییر به postgres، settings.py را به روز کنید (بیشتر)
dj_database_url را نصب کنید
psycopg2 را نصب کنید
برای استفاده از Postgres، settings.py را به روز کنید:
from dj_database_url import parse as dburl
# this replaces the initial default for the local db
default_dburl = 'postgres://localhost/<dbname>'
DATABASES = {
'default': config('DATABASE_URL', default=default_dburl, cast=dburl),
}به یاد داشته باشید که کاربر را با دستور createuser دوباره ایجاد کنید
تولید با Heroku
1.نصب pip install python-decouple
2.یک فایل .env ایجاد کنید و SECRET_KEY را از settings.py به بالا منتقل کنید
3.pip install dj-database-url را نصب کنید و مسیر DB را در settings.py به روز کنید
4.pip install dj-static را نصب کنید، wsgi.py را برای استفاده از Cling به روز کنید
from dj_static import Cling from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<project>.settings") application = Cling(get_wsgi_application())
5. pip freeze > requires-dev.txt را اجرا کنید
6. requires.txt را برای heroku ایجاد کنید که شامل require-dev.txt و موارد دیگر است
-r requirements-dev.txt
gunicorn
psycopg27. یک پروفایل ایجاد کنید
web: gunicorn <project>.wsgi --log-file -8. runtime.txt را ایجاد کنید و آخرین نسخه پایتون را که توسط heroku پشتیبانی می شود وارد کنید
9. پس از اعمال تغییرات، از داشبورد، cli یا ادغام خودکار github، با Heroku مستقر شوید
10. مانیتور سیاهههای مربوط با هیروکو سیاهههای مربوط –tail -a <پروژه>
اجرای اسکریپت های یکباره
django-extensions و userunscript را نصب کنید
python3 manage.py runscript <script.py>
نمونه گردش کار برای ساخت REST API با جنگو
1.یک دایرکتوری برای پروژه ایجاد کنید
2.شروع پایتون venv
3.django, djangorestframework را نصب کنید
4.شروع پروژه جنگو
5.django-admin startproject برای پروژه
6.-admin startapp برای برنامه
7.سرور را با python3 manager.py runserver راه اندازی کنید
8.مهاجرت ها را با python manager.py migrate اجرا کنید
9.urls.py را به روز کنید (در صورت وجود، یک برنامه جدید برای برنامه جدید خود در مرحله 6 ایجاد کنید)
urlpatterns = [
path("admin/", admin.site.urls),
path("api/", include('api.urls')),
]10. تنظیمات.py را بهروزرسانی کنید تا rest_framework و api (پروژه جدید) را در INSTALLED_APPS اضافه کنید.
11. ایجاد superuser با python3 [manage.py](<http://manage.py>) createsuperuser
12. مسیریابی: در urls.py برنامه خود، از روترهای وارداتی rest_framework انجام دهید
13. مدل های داده را در models.py تعریف کنید
14. python3 manager.py makemigrations را اجرا کرده و مهاجرت کنید. اگر با مشکلاتی مانند عدم شناسایی تغییرات مواجه شدید، python3 makemigrations <app name> را اجرا کنید
15. سریال سازها را برای مدل های داده در serializers.py تنظیم کنید
16. با استفاده از سریال سازها نماها ایجاد کنید (views.py)
17. Viewset ها را در روتر خود ثبت کنید (urls.py)
18. متدهای سفارشی API را اضافه کنید. به عنوان مثال، تماس های POST را در views.py تعریف کنید
