You are on page 1of 13

‫‪API‬‬

‫‪Application Programming Interface‬‬


‫مجموعه‌ای از قوانین است که اجازه می‌دهد یک برنامه با برنامه‌های دیگر ارتباط برقرار کند‪ .‬این متدها و فرمت‌های‬
‫‌ها در توسعه نرم‌افزار‪. API‬داده‌ای را تعیین می‌کند که برنامه‌ها می‌توانند برای ارتباط با یکدیگر از آن‌ها استفاده کنند‬
‫‪.‬مدرن بسیار حیاتی هستند‪ ،‬زیرا این امکان را فراهم می‌کنند که سیستم‌ها و برنامه‌های مختلف با هم کار کنند‬

‫‪pip install djangorestframework‬‬


‫[ = ‪INSTALLED_APPS‬‬
‫‪...‬‬
‫‪'rest_framework',‬‬
‫]‬
‫‪Postman‬‬
‫‪ Postman‬یک ابزار برای آزمایش ‪‌API‬ها است‪ .‬این ابزار به شما امکان می‌دهد انواع مختلف درخواست‌های ‪HTTP‬‬ ‫‪‬‬

‫(مانند ‪ )GET، POST، PUT، DELETE‬را به یک ‪ URL‬ارسال کرده و پاسخ‌ها را مشاهده کنید‪ .‬این برای آزمایش و‬
‫عیب‌یابی نقاط پایانی ‪ API‬شما بسیار مفید است‪ .‬شما می‌توانید ‪ Postman‬را برای شبیه‌سازی درخواست‌ها به سرور‬
‫‪ Django‬خود استفاده کنید بدون اینکه نیازی به رابط کاربری جلویی داشته باشید‪.‬‬
‫رابط کاربری جلویی؟‬
‫‪@csrf_exempt‬‬

‫نوعی حمله است که کاربر وب را به انجام اقداماتی که قصد آن‌ها را ندارند‪ ،‬فریب می‌دهد‪ Django .‬از این نوع حمالت به‬ ‫‪‬‬

‫صورت پیش‌فرض محافظت می‌کند‪.‬‬

‫دکوراتور @‪ csrf_exempt‬راهی برای گفتن به ‪ Django‬است که از اعمال احراز هویت ‪ CSRF‬برای یک نمای‬ ‫‪‬‬

‫خاص خودداری کند‪ .‬این زمانی مفید است که شما در حال آزمایش ‪ API‬خود از طریق ابزارهایی مانند ‪ Postman‬هستید‪.‬‬
‫با این حال‪ ،‬مهم است که توجه داشته باشید که غیرفعال کردن محافظت ‪ CSRF‬می‌تواند باعث آسیب‌پذیری برنامه شما‬
‫شود‪ ،‬بنابراین باید با احتیاط و فقط زمانی که ضروری است استفاده شود‪.‬‬
‫‪Imports‬‬
‫‪‬‬ ‫‪from django.http import JsonResponse‬‬
‫‪‬‬ ‫‪from django.views.decorators.csrf import csrf_exempt‬‬
‫‪‬‬ ‫‪import pandas as pd‬‬
‫‪‬‬ ‫‪from .models import Book‬‬
‫‪ JsonResponse: .۱‬تابع کمکی ‪ Django‬برای ایجاد پاسخ در قالب ‪.JSON‬‬
‫‪ csrf_exempt: .۲‬دکوراتور برای معافیت این نما از تأیید ‪( CSRF‬معموًال برای تولید توصیه نمی‌شود)‪.‬‬
‫‪ pandas as pd: .۳‬وارد کردن کتابخانه ‪ ،pandas‬که برای دستکاری و تجزیه و تحلیل داده‌ها استفاده می‌شود‪ ،‬به‌ویژه برای‬
‫رسیدگی به فایل‌های ‪ Excel‬در اینجا‪.‬‬
‫‪ from .models import Book: .۴‬وارد کردن مدل ‪ Book‬از فایل ‪ models.py‬در همان دایرکتوری (نشان داده شده‬
‫توسط ‪.).‬‬
 pip install openpyxl
 pip install pandas
View Function

 @csrf_exempt
 def upload_books(request):

.‫ معاف باشد‬CSRF ‫ اعمال می‌شود تا از چک‌های‬upload_books ‫ این دکوراتور بر روی تابع‬:csrf_exempt @ .۵ 

‫ را به عنوان آرگومان‬request ‫ که یک شیء‬upload_books ‫ تعریف تابع نمای‬:def upload_books(request) .۶ 

.‫می‌گیرد‬
‫‪Handling the Request‬‬

‫‪‬‬ ‫‪if request.method == 'POST’:‬‬

‫این خط بررسی می‌کند که آیا درخواست ورودی یک درخواست ‪ POST‬است که معموًال برای ارسال داده‌ها استفاده‬ ‫‪‬‬

‫می‌شود‪.‬‬
Handling the Uploaded File

 excel_file = request.FILES.get('file')
 if not excel_file:
 return JsonResponse({'error': 'No file provided'}, status=400)

.‫' از فایل‌های بارگذاری شده‬file' ‫ تالش برای بازیابی فایلی با کلید‬:excel_file = request.FILES.get('file') .۸ 

.‫ بررسی می‌کند که آیا فایلی فراهم نشده است‬:if not excel_file .۹ 

‫ پاسخ‬،‫ اگر هیچ فایلی یافت نشود‬:return JsonResponse({'error': 'No file provided'}, status=400) .۱۰ 

.‫ (درخواست بد) برمی‌گرداند‬HTTP ۴۰۰ ‫ با یک پیام خطا و کد وضعیت‬JSON


data = pd.read_excel(excel_file)

 data = pd.read_excel(excel_file)

DataFrame .‫ می‌خواند‬DataFrame pandas ‫ را به یک‬Excel ‫ فایل‬:data = pd.read_excel(excel_file) .۱۱ 

.‫یک ساختار داده دو بعدی با برچسب است‬


‫‪Iterating Over DataFrame Rows‬‬

‫‪‬‬ ‫‪for _, row in data.iterrows():‬‬

‫‪ :)(for _, row in data.iterrows‬این خط یک حلقه است‪ .‬حلقه به ما این امکان را می‌دهد که از طریق هر ردیف از‬ ‫‪‬‬

‫داده‌های فایل اکسل حرکت کنیم‪ )(iterrows .‬یک روش برای پیمایش هر ردیف در داده‌ها است‪ .‬در این حلقه‪ row ،‬نشان‬
‫دهنده هر ردیف فعلی از داده‌های فایل اکسل است‪.‬‬
‫‪Creating Book Instances‬‬

‫‪‬‬ ‫(‪Book.objects.create‬‬
‫‪‬‬ ‫‪title=row.get('title'),‬‬
‫‪‬‬ ‫‪author=row.get('author'),‬‬
‫‪‬‬ ‫‪page=row.get('page'),‬‬
‫‪‬‬ ‫‪publisher=row.get('publisher'),‬‬
‫‪‬‬ ‫)’‪date=row.get('date‬‬
‫‪‬‬ ‫)‬
‫‪.‬این خط یک رکورد جدید در پایگاه داده ایجاد می‌کند‪ .‬هر رکورد معادل یک کتاب است ‪۲. Book.objects.create(...):‬‬

‫‪:‬در این قسمت‪ ،‬ما خصوصیات هر کتاب را تنظیم می‌کنیم ‪۳.‬‬

‫‪.‬فایل اکسل می‌گیریم '‪ 'title‬عنوان کتاب را از ستون ‪title=row['title']:‬‬


‫‪.‬یک فاصله وجود دارد '‪ 'author‬فایل اکسل می‌گیریم‪ .‬توجه کنید که بعد از ' ‪ 'author‬نام نویسنده کتاب را از ستون ‪author=row['author ']:‬‬
‫‪.‬فایل اکسل می‌گیریم '‪ 'page‬تعداد صفحات کتاب را از ستون ‪page=row['page']:‬‬
‫‪.‬فایل اکسل می‌گیریم '‪ 'publisher‬نام ناشر کتاب را از ستون ‪publisher=row['publisher']:‬‬
‫‪.‬فایل اکسل می‌گیریم '‪ 'date‬تاریخ انتشار کتاب را از ستون ‪date=row['date']:‬‬
Final Response

 return JsonResponse({'message': 'Books uploaded successfully’})

.‫ با یک پیام موفقیت ارسال می‌کند‬JSON ‫ این خط یک پاسخ‬،‫اگر فایل با موفقیت پردازش شود‬
Handling Other HTTP Methods

 else:
 return JsonResponse({'error': 'Invalid method'}, status=400)

HTTP ۴۰۰ ‫ دربر می‌گیرد و یک پیام خطا با کد وضعیت‬،‫ نیست‬POST ‫ مواردی را که در آنها متد درخواست‬else ‫این بخش‬
.‫برمی‌گرداند‬

You might also like