نکات کلیدی
1. پذیرش فلسفه طراحی جنگو برای کد تمیز و قابل نگهداری
"هنر ایجاد و نگهداری یک برنامه جنگو خوب این است که باید از فلسفه یونیکس کوتاه شده به گفته داگلاس مکایلروی پیروی کند: 'برنامههایی بنویسید که یک کار را انجام دهند و آن را به خوبی انجام دهند.'"
ساده نگهدارید. فلسفه طراحی جنگو بر سادگی، وضوح و اصل "خود را تکرار نکنید" (DRY) تأکید دارد. این مفاهیم را با نوشتن کد تمیز و خوانا که از دستورالعملهای سبک PEP 8 پیروی میکند، بپذیرید. از واردات نسبی صریح برای بهبود قابلیت حمل کد و جلوگیری از وابستگیهای دایرهای استفاده کنید.
معماری ماژولار. پروژه خود را به برنامههای کوچک و متمرکز تقسیم کنید که هر کدام یک عملکرد خاص را مدیریت میکنند. این کار قابلیت استفاده مجدد از کد را ترویج میدهد و پروژه شما را آسانتر برای نگهداری و مقیاسپذیری میکند. در صورت شک، به سمت ایجاد برنامههای بیشتر و کوچکتر به جای کمتر و بزرگتر تمایل داشته باشید.
اتصال شل. برای اتصال شل بین بخشهای مختلف برنامه خود تلاش کنید. این به معنای نگهداشتن منطق کسبوکار خارج از نماها، استفاده مناسب از روشها و مدیران مدل، و بهرهگیری از ویژگیهای قدرتمند ORM جنگو است. با پیروی از این اصول، پروژه جنگویی ایجاد خواهید کرد که درک، اشکالزدایی و گسترش آن در طول زمان آسانتر است.
2. راهاندازی محیط بهینه جنگو با کنترل نسخه و محیطهای مجازی
"یک مکان خوب برای ایجاد virtualenv برای این پروژه یک دایرکتوری جداگانه است که تمام virtualenvهای خود را برای تمام پروژههای پایتون خود نگه میدارید."
استفاده از کنترل نسخه. گیت محبوبترین انتخاب برای پروژههای جنگو است. یک فایل .gitignore ایجاد کنید تا فایلهای غیرضروری (مانند فایلهای پایگاه داده و کد پایتون کامپایل شده) را از کنترل نسخه مستثنی کنید. زود و اغلب با پیامهای تعهد معنادار که تغییرات انجام شده را توصیف میکنند، تعهد کنید.
محیطهای مجازی. از virtualenv برای ایجاد محیطهای پایتون ایزوله برای هر یک از پروژههای خود استفاده کنید. این کار از تضاد بین نسخههای بستهها در پروژههای مختلف جلوگیری میکند. استفاده از virtualenvwrapper را برای مدیریت آسانتر چندین محیط مجازی در نظر بگیرید.
مدیریت وابستگی. از pip و فایلهای requirements برای مدیریت وابستگیهای پروژه خود استفاده کنید. فایلهای requirements جداگانه برای محیطهای مختلف (مثلاً توسعه، تولید) ایجاد کنید تا سازگاری در سراسر استقرارها را تضمین کنید. وابستگیهای خود را به نسخههای خاصی پین کنید تا از شکستهای غیرمنتظره به دلیل بهروزرسانی بستهها جلوگیری کنید.
3. ساختاردهی پروژه و برنامههای جنگو برای مقیاسپذیری و استفاده مجدد
"رابط مدیریت جنگو برای مدیران سایت طراحی شده است، نه کاربران نهایی."
چیدمان پروژه. از یک ساختار پروژه سازگار با جداسازی واضح نگرانیها پیروی کنید. برنامههای جنگو، فایلهای پیکربندی و داراییهای استاتیک خود را در مکانهای منطقی قرار دهید. از یک رویکرد سهلایه استفاده کنید: ریشه مخزن، ریشه پروژه جنگو و ریشه پیکربندی.
طراحی برنامه. برنامههای کوچک و متمرکزی ایجاد کنید که عملکرد خاصی را مدیریت کنند. برنامههای خود را به وضوح نامگذاری کنید و از نامهای مفرد برای مدلها استفاده کنید (مثلاً "کاربر" به جای "کاربران"). برنامههای خود را تا حد امکان مستقل نگهدارید تا استفاده مجدد را ترویج دهید.
سفارشیسازی مدیریت. از رابط مدیریت جنگو برای وظایف مدیریت داخلی استفاده کنید، نه به عنوان یک رابط کاربری. مدیریت را به اندازه نیاز سفارشی کنید، اما از سفارشیسازی بیش از حد که ممکن است ارتقاء را دشوار کند، اجتناب کنید. در عوض، نماهای مدیریت سفارشی برای وظایف پیچیده مدیریتی ایجاد کنید.
4. بهرهگیری از ORM قدرتمند جنگو و بهترین شیوههای طراحی مدل
"با طراحی پایگاه داده نرمال شروع کنید و فقط در صورتی که گزینههای دیگر را به طور کامل بررسی کردهاید، از نرمالسازی خارج شوید."
طراحی مدل. با طراحی پایگاه داده نرمال شروع کنید و فقط در صورت لزوم برای دلایل عملکردی از نرمالسازی خارج شوید. از انواع فیلد مناسب استفاده کنید و از اعتبارسنجی داخلی جنگو بهره ببرید. روشهای مدل سفارشی برای منطق کسبوکار مرتبط با یک مدل خاص پیادهسازی کنید.
Querysets و مدیران. از ORM جنگو به طور مؤثر با بهرهگیری از querysets و مدیران سفارشی استفاده کنید. کوئریهای کارآمد با استفاده از select_related() و prefetch_related() بنویسید تا ضربات پایگاه داده را به حداقل برسانید. روشهای مدیر سفارشی برای کوئریهای پرکاربرد یا عملیات پیچیده ایجاد کنید.
مهاجرتها. از South (برای جنگو < 1.7) یا مهاجرتهای داخلی جنگو برای مدیریت تغییرات طرح پایگاه داده استفاده کنید. برای همه تغییرات مدل مهاجرت ایجاد و اعمال کنید و هنگام اصلاح مهاجرتهای موجود در محیطهای تولید محتاط باشید.
5. تسلط بر نماهای مبتنی بر کلاس و فرمها برای توسعه کارآمد
"قدرت CBVها به قیمت سادگی به دست میآید: CBVها با یک زنجیره ارثبری پیچیده همراه هستند که میتواند تا هشت کلاس فوقالعاده در واردات داشته باشد."
نماهای مبتنی بر کلاس (CBVها). درک کنید که چه زمانی از نماهای مبتنی بر تابع در مقابل نماهای مبتنی بر کلاس استفاده کنید. از CBVها برای عملیات CRUD رایج استفاده کنید و از mixinها برای ترکیب قابلیتهای نمای قابل استفاده مجدد استفاده کنید. منطق نما را از URLconfs جدا نگهدارید تا نگهداری بهتر شود.
فرمها. از سیستم فرم جنگو برای همه ورودیهای کاربر و اعتبارسنجی استفاده کنید. از ModelForms هنگام کار مستقیم با دادههای مدل استفاده کنید. اعتبارسنجی فیلد فرم سفارشی و روشهای پاکسازی را در صورت نیاز پیادهسازی کنید. از formsetها برای مدیریت چندین فرم در یک صفحه استفاده کنید.
قالبها. رویکردی حداقلی به قالبها دنبال کنید و منطق را در کد پایتون به جای برچسبهای قالب نگهدارید. از ارثبری قالب به طور مؤثر استفاده کنید و از برچسبها و فیلترهای قالب برای منطق ارائه استفاده کنید. از اتصال سبکها به کد پایتون به شدت اجتناب کنید.
6. پیادهسازی اقدامات امنیتی قوی برای محافظت از برنامه جنگو
"هرگز دادههای کارت اعتباری را ذخیره نکنید."
HTTPS در همه جا. از HTTPS برای کل سایت خود، از جمله منابع استاتیک استفاده کنید. سرور وب خود را برای هدایت ترافیک HTTP به HTTPS پیکربندی کنید و امنیت حمل و نقل سخت (HSTS) را پیادهسازی کنید.
تنظیمات امن. کلیدهای مخفی و اطلاعات حساس را از کنترل نسخه دور نگهدارید. از متغیرهای محیطی برای ذخیره اسرار استفاده کنید و از فایلهای تنظیمات جنگو برای مدیریت پیکربندیهای مختلف برای محیطهای توسعه، مرحلهبندی و تولید بهره ببرید.
اعتبارسنجی ورودی. همیشه ورودی کاربر را با استفاده از سیستم فرم جنگو اعتبارسنجی و پاکسازی کنید. با فایلهای آپلود شده توسط کاربر محتاط باشید و مجوزها و کنترلهای دسترسی مناسب را پیادهسازی کنید. از حفاظت داخلی جنگو در برابر آسیبپذیریهای رایج مانند CSRF، XSS و تزریق SQL استفاده کنید.
7. بهینهسازی عملکرد و مدیریت چالشهای مقیاسپذیری در پروژههای جنگو
"به یاد داشته باشید، بهینهسازی زودهنگام بد است."
بهینهسازی پایگاه داده. از شاخصهای پایگاه داده به طور عاقلانه استفاده کنید، کوئریها را بهینه کنید و از کش برای کاهش بار پایگاه داده بهره ببرید. در صورت لزوم از ویژگیهای خاص پایگاه داده (مثلاً شاخصگذاری پیشرفته PostgreSQL) استفاده کنید.
کش. کش را در سطوح مختلف پیادهسازی کنید: کش قطعه قالب، کش نما و استفاده از API کش سطح پایین. از Memcached یا Redis به عنوان پشتیبان کش خود برای عملکرد بهتر استفاده کنید.
وظایف غیرهمزمان. وظایف زمانبر را به کارگران غیرهمزمان با استفاده از Celery یا صفهای وظیفه مشابه منتقل کنید. این کار به حفظ پاسخگویی در برنامه شما کمک میکند، به ویژه برای فرآیندهای طولانیمدت.
8. بهرهگیری عاقلانه از ویژگیهای داخلی جنگو و بستههای شخص ثالث
"قدرت واقعی جنگو بیش از فقط چارچوب و مستندات موجود در http://djangoproject.com است. این انتخاب وسیع و در حال رشد بستههای جنگو و پایتون شخص ثالث ارائه شده توسط جامعه منبع باز است."
ویژگیهای داخلی. از ویژگیهای داخلی جنگو مانند رابط مدیریت، سیستم احراز هویت و ORM به طور کامل استفاده کنید. این اجزا به خوبی آزمایش شدهاند و به طور یکپارچه با بقیه چارچوب ادغام میشوند.
بستههای شخص ثالث. از اکوسیستم جامعه جنگو از بستههای شخص ثالث برای افزودن سریع عملکرد به پروژه خود استفاده کنید. بستههای محبوب شامل django-rest-framework برای ساخت APIها، django-allauth برای احراز هویت پیشرفته و django-debug-toolbar برای اشکالزدایی توسعه هستند.
راهحلهای سفارشی. هنگام در نظر گرفتن استفاده از یک بسته شخص ثالث یا ساخت یک راهحل سفارشی، عواملی مانند قابلیت نگهداری، عملکرد و نیازهای خاص پروژه را ارزیابی کنید. گاهی اوقات، یک پیادهسازی سفارشی ساده ممکن است مناسبتر از یک راهحل پیچیده شخص ثالث باشد.
9. پیادهسازی شیوههای جامع تست و مستندسازی
"تستها سنگ برنامهنویس هستند، ترس را به کسالت تبدیل میکنند." –کنت بک
استراتژی تست. یک استراتژی تست جامع که شامل تستهای واحد، تستهای یکپارچهسازی و تستهای عملکردی است، پیادهسازی کنید. از چارچوب تست جنگو و ابزارهایی مانند coverage.py برای اندازهگیری و بهبود پوشش تست استفاده کنید.
یکپارچهسازی مداوم. یک سیستم یکپارچهسازی مداوم (CI) راهاندازی کنید تا مجموعه تست شما به طور خودکار در هر تعهد کد اجرا شود. این کار به شناسایی زودهنگام باگها کمک میکند و اطمینان میدهد که کدبیس شما با تکامل آن پایدار باقی میماند.
مستندسازی. مستندات واضح و مختصر برای پروژه خود بنویسید، از جمله دستورالعملهای نصب، مراجع API و راهنماهای کاربر. از ابزارهایی مانند Sphinx برای تولید مستندات از docstringها استفاده کنید و آن را با تکامل پروژه بهروز نگهدارید.
آخرین بهروزرسانی::
FAQ
What's "Two Scoops of Django: Best Practices for Django 1.5" about?
- Comprehensive Guide: The book is a comprehensive guide to best practices for developing with Django 1.5, focusing on practical advice and real-world examples.
- Authors' Expertise: Written by Daniel Roy Greenfeld and Audrey Roy, it draws on their extensive experience in Django development.
- Focus on Best Practices: It emphasizes coding standards, project layout, and app design to help developers create maintainable and scalable Django applications.
- Target Audience: Aimed at both new and experienced Django developers looking to improve their skills and adopt industry best practices.
Why should I read "Two Scoops of Django: Best Practices for Django 1.5"?
- Improve Django Skills: It provides insights into advanced Django techniques and best practices that can enhance your development skills.
- Avoid Common Pitfalls: The book helps you avoid common mistakes and pitfalls in Django development, saving time and effort.
- Real-World Examples: It includes practical examples and scenarios that you can directly apply to your projects.
- Community Insights: The book incorporates feedback and advice from the Django community, offering a well-rounded perspective.
What are the key takeaways of "Two Scoops of Django: Best Practices for Django 1.5"?
- Coding Style: Emphasizes the importance of readable and maintainable code, following PEP 8 and Django's coding style guidelines.
- Project Layout: Recommends a three-tiered project layout for better organization and scalability.
- App Design: Advocates for small, focused apps that do one thing well, following the Unix philosophy.
- Settings Management: Suggests using multiple settings files and environment variables to manage different environments securely.
What are the best quotes from "Two Scoops of Django: Best Practices for Django 1.5" and what do they mean?
- "Write programs that do one thing and do it well." This quote emphasizes the importance of focused app design, encouraging developers to create apps that are specialized and efficient.
- "Keep It Simple, Stupid." A reminder to avoid unnecessary complexity in software projects, which can hinder maintenance and scalability.
- "Fat Models, Helper Modules, Thin Views, Stupid Templates." This principle guides developers to place business logic in models and helper modules, keeping views and templates simple.
- "Stand on the Shoulders of Giants." Encourages leveraging existing open-source packages and community knowledge to build better applications.
How does "Two Scoops of Django" recommend setting up a Django project?
- Three-Tiered Layout: The book suggests a three-tiered project layout: repository root, Django project root, and configuration root for better organization.
- Version Control: Emphasizes the use of version control systems like Git to track changes and collaborate effectively.
- Environment Consistency: Recommends using the same database engine across all environments to avoid discrepancies and issues.
- Use of Virtualenv and Pip: Advocates for using virtualenv and pip to manage dependencies and isolate project environments.
What is the "Golden Rule of Django App Design" according to "Two Scoops of Django"?
- Single Responsibility: Each app should focus on a single responsibility, making it easier to maintain and extend.
- Modular Design: Encourages breaking down large apps into smaller, more manageable components.
- Reusability: Designing apps with reusability in mind, so they can be easily integrated into other projects.
- Clear Naming: Use clear and descriptive names for apps to improve readability and understanding.
How does "Two Scoops of Django" suggest handling settings and requirements files?
- Multiple Settings Files: Use separate settings files for different environments (development, staging, production) to manage configurations effectively.
- Environment Variables: Keep sensitive information like secret keys out of version control by using environment variables.
- Requirements Management: Use multiple requirements files to specify dependencies for different environments, ensuring consistency and security.
- Avoid Local Settings Anti-Pattern: Discourages the use of untracked local settings files, which can lead to inconsistencies and errors.
What are the best practices for Django models according to "Two Scoops of Django"?
- Normalization First: Start with normalized models and only denormalize if absolutely necessary for performance reasons.
- Use of Indexes: Add indexes as needed to improve query performance, but avoid over-indexing.
- Model Inheritance: Prefer abstract base classes over multi-table inheritance to avoid unnecessary complexity and performance issues.
- Migration Management: Use South for managing database migrations, ensuring smooth transitions between schema changes.
How does "Two Scoops of Django" recommend using function- and class-based views?
- Choose Wisely: Decide between function-based views (FBVs) and class-based views (CBVs) based on the complexity and reusability of the view.
- Keep Logic Out of URLConfs: Maintain a clear separation between URL routing and view logic to enhance maintainability.
- Business Logic in Models: Encourage placing business logic in models or helper functions rather than views to promote reusability.
- Use Mixins: Leverage mixins to add reusable functionality to CBVs, keeping views clean and focused.
What are the recommended practices for building REST APIs in Django according to "Two Scoops of Django"?
- Use Appropriate HTTP Methods: Follow REST conventions by using GET, POST, PUT, DELETE, etc., for corresponding actions.
- Status Codes: Implement common HTTP status codes to communicate the result of API requests effectively.
- Keep Business Logic Out of API Views: Similar to regular views, keep business logic in models or helper functions to maintain clean API views.
- Test Your API: Ensure thorough testing of API endpoints to catch issues early and maintain reliability.
How does "Two Scoops of Django" suggest optimizing Django templates?
- Minimalist Approach: Keep templates simple and avoid complex logic, focusing on presentation rather than processing.
- Template Inheritance: Use template inheritance to maintain a consistent layout and reduce duplication.
- Avoid Processing in Templates: Move data processing to views or models to improve performance and maintainability.
- Use of block.super: Leverage block.super to extend parent templates while maintaining control over content.
What security best practices does "Two Scoops of Django" recommend?
- Turn Off DEBUG in Production: Ensure DEBUG mode is off in production to prevent exposure of sensitive information.
- Use HTTPS Everywhere: Protect data in transit by using HTTPS for all communications between the server and clients.
- CSRF Protection: Always use CSRF protection for forms that modify data to prevent cross-site request forgery attacks.
- Secure Admin Interface: Change the default admin URL, use HTTPS, and limit access based on IP to secure the Django admin interface.
نقد و بررسی
کتاب دو اسکوپ از جنگو عمدتاً نقدهای مثبتی دریافت کرده است و میانگین امتیاز 4.22 از 5 را کسب کرده است. خوانندگان از نکات ارزشمند، بهترین روشها و سبک نوشتاری واضح آن تمجید میکنند. بسیاری از آن به عنوان منبعی مفید برای توسعهدهندگان متوسط جنگو یاد میکنند، هرچند برخی معتقدند که برای مبتدیان ایدهآل نیست. این کتاب به خاطر پوشش موضوعاتی فراتر از مستندات رسمی و کمک به توسعهدهندگان برای کارآمدتر شدن، مورد تحسین قرار گرفته است. برخی انتقادات شامل کمبود عمق در برخی فصلها و احتمال قدیمی شدن سریع به دلیل تغییرات نسخههای جنگو است. به طور کلی، خوانندگان از توصیههای عملی و کاربرد واقعی کتاب قدردانی میکنند.