در این بخش می خوایم آموزش کامل و قدم به قدم API نویسی با جنگو رو به صورت پروژه محور به شما عزیزان آموزش بدیم. فریمورکی که ما برای این آموزش در نظر گرفتیم، جنگو هستش. اصلاً نیازی نیست که در این مورد نگران باشید چون ما تمام مراحل نصب و شروع کد نویسی با این فریمورک رو به شما آموزش میدیم. اول از همه بهتره یه ذره در مورد API و کاربرد اون صحبت کنیم. اگر میخواید که API نویسی رو به صورت پروژه محور یاد بگیرید، ادامه مطلب رو از دست ندید:
آشنایی با API
API یا همون Application Programming Interface یه واسط نرم افزاریه که با استفاده از اون دو برنامه مختلف میتونن با همدیگر تعامل داشته باشند. فیسبوک و اینستاگرام بهترین مثالی هستن که می تونیم برای API بیان کنیم. هر باری که از اپلیکیشن موبایل فیسبوک پیامی دریافت میکنید، در واقع دارید از API فیسبوک استفاده می کنید.
وقتی که در گوشی خودتون از برنامهای استفاده می کنید، برنامه به اینترنت متصل میشه و دادهها رو به سرور ارسال میکنه. سپس، سرور دادههای دریافتی رو بازیابی و تفسیر میکنه و بعد از انجام اقدامات لازم رو انجام میده و داده ها رو به گوشی شما ارسال می کنه. بعد برنامه دادههای دریافتی رو تفسیر میکنه و اون چیزی که میخواستید رو به شما ارائه میده. همه این کارا از طریق API انجام میشه.
حالا که با کاربرد API آشنا شدیم، بهتره که وارد فاز پیادهسازی بشیم چون یادگیری نحوه پیادهسازی یه برنامه ساده تأثیر خیلی بیشتری در کیفیت آموزش داره تا چند هزار توضیح تئوری.
پیادهسازی برنامه تشخیص جنسیت با استفاده از اسم
هدف از این برنامه آشنایی با نحوه ایجاد پروژه در جنگو و دریافت داده از یک API رایگان هستش. قبل از شروع کد نویسی، بهتره یکم با فریمورک جنگو و ساختار اون آشنا بشیم تا درک ادامه کار راحتتر باشه.
آشنایی با فریمورک جنگو
جنگو یه فریمورک فوقالعاده محبوب و برجسته هست که به زبان پایتون نوشته شده. این فریمورک رایگان و متن باز الگوی MVT یا model-view-template پیروی میکنه. حالا ممکنه بپرسین که چرا جنگو؟ ویژگیهای زیادی هستن که باعث شدن این فریمورک یه گزینه عالی برای ایجاد وبسایت های مبتنی بر پایگاه داده باشه. از مهمترین این ویژگیها میتونیم به موارد زیر اشاره کنیم:
- توسعه سریع
- کد کمتر و نظم بیشتر
- قابلیت Plugin کردن اجزای سازنده
- قابلیت استفاده مجدد
- استفاده از پایتون در تمام برنامه حتی تنظیمات
- مقیاسپذیری بالا
نصب جنگو و ایجاد اولین پروژه
قبل از آموزش نصب بهتره یکم در مورد environment (env) ها صحبت کنیم. وقتی میخوایم پروژههای جدیدی رو ایجاد کنیم، امکان داره که هر کدوم از اونها نیازمندیهای متفاوتی داشته باشند. بهعنوانمثال کتابخونه ها و ماژولهای موردنیاز یه وب اپلیکیشن و یه پروژه هوش مصنوعی متفاوته. به همین دلیل بهتره که برای هر پروژه خاص که نیازمندی هاش متفاوت با پروژههای دیگس یه environment جدا ایجاد کنید. البته، بهتره ازاینجهت هم به مسئله نگا کنیم که وقتی می خوایم یه پروژه آماده رو از git یا kaggle اجرا کنیم شاید به کتابخونه هایی با ورژن خاص نیاز داشته باشیم. به همین خاطر ایجاد env باعث میشه که این کار رو راحتتر انجام بدیم و دیگ مجبور نباشیم که به خاطر این اجرا، ورژن پایتون یا کتابخونه هایی که برای کار دیگ لازم داریم رو تغییر بدیم.
شما با ایجاد env و اجرا کردن پروژه خودتون در اون محیط از کتابخونه ها و ماژولهایی که روی اون نصب هست بهرهمند می شید.
حالا که صحبت از ایجاد env شد، بهتره که به conda اشاره کنیم. شما با استفاده از conda بهراحتی می تونید env ایجاد کنید، کتابخونه ها و ماژولهای موردنیاز رو نصب کنید و کلی کار دیگ که مطابق با هدف و برنامه تون به اونها نیاز دارید. اگر تا حالا پکیج منیجر conda رو نصب نکردید، بهتره که همینالان نصب conda رو انجام بدید تا ادامه پروژه رو دنبال کنید.
حالا که conda رو نصب کردید، CMD رو باز میکنیم و یه env جدید برای پروژه ایجاد میکنیم.
conda create --name env_name python=3.9.2
با استفاده از این دستور یه env با یه اسم دلخواه (env_name) ایجاد کردیم. با قرار دادن python=3.9.2 در ادامه دستور ورژن پایتونی که در این env نصب میشه رو هم مشخص میکنیم.
برای اینکه این محیط رو اکتیو کنیم از دستور زیر استفاده میکنیم:
conda activate env_name
حالا میتونیم وارد مرحله نصب جنگو و کتابخونه های دیگ برای پروژه خودمون بشیم، اسمی که برای env پروژه در نظر گرفتیم، api هست که تصویر زیر این مراحل رو واضحتر نشون میده. چون قبلاً جنگو روی سیستم نصب بود، مراحل دانلود و نصب از قبل انجام شدند. اگر محیط جدید ایجاد کردید و میخواین جنگو رو نصب کنید، پکیجهایی که دانلود و نصب میشن رو نشون میده:
بعد از نصب جنگو، نوبت میرسه به مرحله ایجاد پروژه و برنامه جنگو. بعد از اینکه در cmd به مسیر دلخواهتون برای ایجاد و ذخیره پروژه رفتید، پروژه رو ایجاد میکنیم. شاید خودتون این تکنیک رو بلد باشید ولی میتونین به جای استفاده از cd برای رفتن به مسیر موردنظر، به صورت زیر عمل کنید:
روی آدرس مسیر موردنظر کلیک کنید، بعد به جای آدرس، cmd رو تایپ کنید و اینتر رو بزنید که cmd رو برای این مسیر باز کنه.
حالا بعد اینکه وارد این مسیر شدید، env موردنظرتونو فعال کنید و بعد پروژه جنگو رو با دستور زیر ایجاد کنید.
django-admin startproject project_name
با این دستور یه دایرکتوری با اسم دلخواه در اون مسیر ایجاد می کنید. برای اینکه بعداً به مشکل برنخورید از اسمهایی مثل django یا test و اون دسته اسمهایی که امکان داره بعداً با پکیجهای خود جنگو اشتباه گرفته شه، خودداری کنین.
البته اینم بگم که ما از vscode برای نوشتن این پروژه استفاده کردیم و شما میتونید از هر ide دیگه ای که باهاش راحتترید، استفاده کنید. حالا بعد اینکه پروژه رو ایجاد کردیم، بهتره دایرکتوری رو در vscode باز کنیم و یه نگاهی به ساختار پروژه داشته بشیم:
ما اسم پروژه رو djangoapi گذاشتیم که حاوی فایلهای مربوط به پروژه هستش. همونطوری که قبلاً هم اشاره کردیم، فرقی نمیکنه که اسم پروژه رو چی میزارید فقط بهتره که از اون کلمات کلیدی مثل django یا test استفاده نکنید.
manage.py. یه ابزار خط فرمانه که به شما اجازه میده از راههای مختلف با پروژه جنگو ارتباط برقرار کنید.
djangoapi. داخل دایرکتوری یه دایرکتوری هماسم با پروژه میبینید که پکیج پایتون اصلی پروژه شما هست.
حالا فایلهایی که داخل این فولدر قرار دارند رو بررسی میکنیم:
djangoapi /__init__.py: یه فایل خالی هست که به پایتون میگه این دایرکتوری باید یه پکیج پایتون در نظر گرفته بشه.
djangoapi /settings.py: همه پیکربندیها و تنظیمات مربوط به پروژه جنگو در این فایل لحاظ میشه.
djangoapi/urls.py: و url های پروژه جنگو در این فایل تعریف میشه.
djangoapi/asgi.py: در واقع این فایل یه نقطه ورودی هست برای وب سرورهای سازگار با asgi تا به پروژه جنگو شما سرویس ارائه بدن.
djangoapi/wsgi.py: در واقع این فایل یه نقطه ورودی هست برای وب سرورهای سازگار با wsgi تا به پروژه جنگو شما سرویس ارائه بدن.
حالا قبل از اینکه وارد مرحله ایجاد برنامه بشیم. بهتر که با دستور زیر وضعیت اتصال به سرور جنگو رو بررسی کنیم.
python manage.py runserver
بعد از وارد کردن این دستور، اگ با خطایی مواجه نشید، خروجی زیر براتون نمایش داده میشه:
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
September 21, 2021 - 15:50:53
Django version 3.2, using settings djangoapi.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
بعد اگر آدرس http://127.0.0.1:8000/ در مرورگر خودتون وارد کنید، صفحه زیر براتون نمایش داده میشه.
ایجاد برنامه nlp_api
بعد ایجاد پروژه دیگ نوبت میرسه به پیادهسازی برنامه. اول از همه بهتره یکم در مورد برنامهای که قراره ایجاد کنیم، توضیح بدیم. برای این برنامه از API رایگان genderize.Io استفاده میکنیم. توجه داشته باشید که برای اجرای این برنامه که قرار به این API متصل بشه، باید VPN خودتون رو فعال کنید.
این API بر این اساس کار میکنه که اسم رو دریافت می کنه و خروجی JSON مربوط به اون اسم رو بهعنوان خروجی میده که هر object اون شامل داده های زیر هستش. (فراخوانی متد GET با postman)
دادههایی که ما برای این برنامه لازم داریم name و gender هست که در ادامه نشون میدیم که از اونا در چه بخشهایی استفاده میکنیم.
حالا بهتره از بحث اصلی دور نشیم. برای اینکه برنامه رو ایجاد کنیم، اول به همون مسیر پروژه جنگو میریم و با اکتیو کردن env موردنظر، با استفاده از دستور زیر برنامه رو ایجاد میکنیم.
python manage.py startapp app_name
اسمی که برای این پروژه در نظر گرفتیم، nlp_api هست که بعد از ایجاد شدن به شکل زیر در داخل پروژه لحاظ میشه.
اسم برنامهای که ایجاد کردید رو باید در داخل setting لحاظ کنید که توسط پروژه شناسایی بشه.
فایلهایی که بیشتر باهاشون سرکار داریم،views و models هستن و البته طراحی صفحه هم با فایلهای html که در داخل فولدر templates ایجاد میکنیم، انجام میشه. اگ این فولدر رو در داخل برنامه ندارین، حتماً این فولدر رو در برنامه ایجاد کنید که بعداً به مشکل برنخورین.
حالا که برنامه رو ایجاد کردیم، وقتشه که وارد مرحله کد نویسی بشیم.
urls.py (دایرکتوری هم اسم با پروژه)
from django.contrib import admin
from django.urls import path , include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('nlp_api.urls')),
]
این کاملاً عادیه که بعد این قسمت، آدرس root یا همون http://127.0.0.1:8000/ رو وارد کنید و صفحه بالایی رو نبینید چون مراحل اصلی طراحی صفحه و ارتباط اون با فایل views هنوز انجام نشده. این تصاویر روی فقط برای این گذاشتیم که با آدرسها آشنا بشید.
حالا فایلهای اصلی برنامه رو به ترتیب بررسی میکنیم.
توجه داشته باشید که فایلهای home.html و ok.html رو در داخل فولدر templates ایجاد میکنیم.
home.html
<!DOCTYPE html>
<html>
<head>
<style>
body {background-color: rgb(194, 197, 221);}
input{width: 100%;
height: 40px;
border-color: blue;
padding: 6px;
border-radius: 10px;
}
.na{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.btn{
width: 50%;
vertical-align: middle;
margin: 12px;
background-color: rgb(96, 59, 199);
height: 40px;
border-color: darkslateblue;
text-anchor: inherit;
color: ivory;
}
</style>
</head>
<body >
<p style="font-size:35px; text-align:center; margin-top: 100px;"><strong>gender of {{response.name}}: </strong> {{response.gender}}</p>
<div class="na">
<form action="{% url 'home' %}" method="post">
{% csrf_token %}
<input id="name" name="name" type="text"
placeholder="Type a name">
<input class="btn" type="submit" value="submit">
</form>
</div>
</body>
</html>
این قطعه کد علاوه بر طراحی دارای ۲ بخش مهم هست که اونارو بهطور مفصل توضیح میدیم:
بخش form قراره که متن یا همون اسم ورودی در بخش input رو به views ارسال کنه. برای اینکار در بخش action، اسم تابع home که در views تعریف شده رو مینویسیم.
{% csrf_token %}
یه اقدام امنیتیه که در form هایی که قراره یه دادههای رو به سرور ارسال کنند، قرار داده میشه تا از حملات احتمالی جلوگیری کنه؛ که در این بخش چون یه برنامه ساده و ابتدایی هست، نیازی بهش نیست ولی بهتره که وارد کنیم.
{{response.name}} , {{response.gender}}
اینها همون دادههای مربوط به اسم ورودی است که به views ارسال شده و خروجی مربوط به اون که اسم و جنسیت هستند و برمیگردونه.
ok.html
این فایل بیشتر برای بررسی اتصال هست و اصلاً نیازی نیست که طراحی این بخش رو انجام بدید ولی ما کد این بخش رو هم قرار میدیم.
<!DOCTYPE html>
<html>
<head>
<style>
body {background-color: rgb(221, 202, 194);}
</style>
</head>
<body >
<p style="font-size:35px; text-align:center; margin-top: 100px; color: rgb(124, 13, 13);"><strong>Hi, wellcome </strong> </p>
</body>
</html>
views.py
from django.shortcuts import render
import requests
def ok(request):
return render(request, 'ok.html')
def home(request):
name = request.POST.get('name','')
u='https://api.genderize.io?name='
url=u+name
response=requests.get(url).json()
return render(request,'home.html',{'response':response})
توجه داشته باشید که برای ایمپورت requests اولی باید با دستور pip(conda) install requests دانلود و نصب کنید.
name = request.POST.get('name','')
این قطعه کد اسم ورودی در بخش input رو دریافت میکنه و در متغیر name ذخیره میکنه. url مورد نیاز برای ارسال درخواست به API به صورت U+NAME مشخص میشه. پاسخ JSON مربوط به ای درخواست با قطعه کد زیر به home.html ارسال میشه.
return render(request,'home.html',{'response':response})
urls.py (برنامه)
from django.contrib import admin
from django.urls import path , include
from nlp_api.views import ok, home
urlpatterns = [
path('admin/', admin.site.urls),
path('vo', ok, name='ok'),
path('', home, name='home')
]
مسیرهای مربوطه رو با استفاده از توابعی که در بخش views و templates هستن، مشخص میکنیم.
یه نمونه از خروجی برنامه:
این پست آموزشی برای آشنایی بیشتر با فریمورک جنگو و نحوه استفاده از اون برای برقراری ارتباط با API تهیه شده بود. امیدواریم که در ادامه با برنامههای جذابتر و کاربردیتر نکات آموزشی مهمتری را در اختیار شما عزیزان قرار دهیم.
برای هرگونه سوال در زمینه آموزش ها فقط کافیه روی لینک واتساپ یا تلگرام (در زیر همین پست) کلیک کنید. یا با شماره تماس بالای صفحه سایت تماس بگیرید.
سلام خیلی آموزش بدردبخوری بود. واقعا ممنون
سلام سپاس از نظر خوب شما