كيفية إنشاء مشروع مع Django

الآن بعد أن عرفنا كيفية إنشاء بيئات افتراضية واستخدام النقطة ، يمكننا البدء في بناء مشروعنا. في هذه المقالة ، سننشئ مشروع Django الأول ، ونكتب الاختبارات ، ونبدأ خادم التطوير الخاص بنا.

خلق البيئة الافتراضية

أولاً ، لنقم بإنشاء بيئة افتراضية جديدة لهذا المشروع. (إذا لم تكن قد قمت بذلك بالفعل ، فقم بإلغاء تنشيط Virtualenv السابق عن طريق الكتابة deactivateفي الجهاز). لمزيد من المعلومات حول البيئات الافتراضية وكيفية استخدامها ، قم بزيارة هذه الصفحة.

انتقل إلى الدليل حيث تريد مشروع Django واكتب ما يلي في المحطة:

mkvirtualenv taskplanner --python=/usr/bin/python3

قد تضطر إلى تغيير مسار بايثون إذا كان يبدو مختلفًا عن المسار أعلاه.

يجب أن يبدو سطر الأوامر الآن كما هو موضح أدناه ، مما يشير إلى أنك في بيئة افتراضية.

(taskplanner)[email protected] ~/workspace] $

إذا لم يكن الأمر كذلك ، فاكتب فقط:

workon taskplanner

يمكننا الآن تثبيت Django:

pip install Django

قم بإنشاء مشروع Django

مع تثبيت Django يمكننا إنشاء مشروعنا:

django-admin.py startproject taskplanner

بعد ذلك ، انتقل إلى مشروعنا الجديد عن طريق كتابة:

cd taskplanner

قبل أن نفعل أي شيء ، لنقم بتعيين هذا الدليل كدليل عمل خاص بنا باستخدام virtualenvwrapper:

setvirtualenvproject

Sidenote : للحصول على قائمة بأوامر virtualenvwrapper ، اكتبvirtualenvwrapperفي جهازك الطرفي.

الآن ، عندما نكون في بيئتنا الافتراضية ، يمكننا الكتابة cdprojectللانتقال مباشرة إلى دليل العمل الخاص بنا.

يجب أن يبدو دليل مشروعك كما يلي:

taskplanner // our main working directory |--- manage.py // similar to the django-admin script, you will see this used a // lot throughout our project |--- taskplanner |--- __init__.py // this just tells python to treat this directory as a package |--- settings.py // main configuration file for our project |--- urls.py // we will use this to configure urls |--- wsgi.py // this is used for deploying our project to a production server

الاختبار الوظيفي

يعد التطوير القائم على الاختبار من أفضل الممارسات المستخدمة على نطاق واسع في تطوير البرامج. بشكل أساسي ، نريد كتابة اختبار أولاً لا بد أن يفشل ، ثم كتابة أقل قدر ممكن من الشفرة لاجتياز هذا الاختبار. مع Django ، هدفنا هو كتابة كل من الاختبارات الوظيفية (المعروفة أيضًا باسم ؛ اختبارات التكامل والاختبارات الشاملة وما إلى ذلك) ، واختبارات الوحدة خلال التطوير. لا تقلق ، فالاختبار ليس صعبًا كما يبدو!

لكن أولاً ، نحتاج إلى إنشاء بيئة افتراضية جديدة مخصصة للاختبار. افتح علامة تبويب جديدة في جهازك ، وانتقل إلى دليل مشروع مخطط المهام واكتب:

mkvirtualenv taskplanner_test --python=/usr/bin/python3

الآن يجب أن يكون لديك علامتا تبويب مفتوحتان في الجهاز الطرفي ، واحدة في البيئة الافتراضية (مخطط المهام) ، والأخرى في البيئة الافتراضية (Taskplanner_test)

إذا قمت بكتابة pip freezeبيئة الاختبار الجديدة الخاصة بنا (taskplanner_test) ، فلن تلاحظ أي شيء يظهر. هذا لأننا لم نقم بعد بتثبيت أي شيء في بيئتنا الجديدة.

لذلك دعونا نمضي قدمًا ونثبت Django أولاً في بيئة الاختبار الخاصة بنا (اختبار المهام):

pip install Django

لإنشاء اختباراتنا الوظيفية ، سنحتاج إلى بعض الأشياء. أولاً ، نحتاج إلى تثبيت متصفح الويب Firefox في جهازنا. إذا لم يكن لديك Firefox ، فثبته الآن.

Sidenote : يمكنك استخدام Chrome لاختبار التكامل ، ولكن عليك تنزيل برنامج التشغيل هنا واتباع سؤال تجاوز سعة المكدس هذا. كان أداء Firefox تاريخيًا أفضل من أداء Chrome عند إجراء اختبارات التكامل ، وهو اعتبار مهم جدًا نظرًا لأنه مقارنة باختبارات الوحدة ، فإن اختبارات التكامل بطيئة للغاية.

وذلك لأن اختبارات التكامل تختبر النظام بأكمله ، بدلاً من "الوحدات" (مكونات صغيرة). في العالم الحقيقي ، من الأفضل أحيانًا تجنب اختبارات التكامل بسبب وقت التطوير الطويل لإنشائها ، ووقت التشغيل البطيء ، والأخطاء الغامضة ، والأسباب الأخرى التي قد تكتشفها في الوقت المناسب.

ومع ذلك ، فإنها لا تزال تستحق اهتمامنا عند تطوير تطبيق العالم الحقيقي ، ويمكن أن تكون مفيدة للغاية من حيث الموثوقية على الرغم من سلبيات الأداء.

بعد ذلك ، نحتاج إلى تثبيت حزمة تسمى السيلينيوم. ستوفر لنا هذه الحزمة WebDriver حتى نتمكن من التحكم في المتصفح من خلال اختباراتنا. يستخدم السيلينيوم عادة لأتمتة متصفحك.

pip install selenium

الآن وبعد تثبيت ذلك ، سنحتاج إلى دليل لإنشاء اختباراتنا:

mkdir functional_tests

taskplannerيجب أن ترى الآن في الدليل ما يلي:

taskplanner |-- functional_tests |--- manage.py |--- taskplanner ...

نحتاج الآن إلى إنشاء بعض الملفات في functional_testsمجلدنا. سننشئ __init__.pyملفًا (سيخبر هذا Python أن يعامل functional_testsكحزمة) ، test_all_users.pyوملفًا يحتوي على اختباراتنا.

لنفعل ذلك الآن:

touch functional_tests/__init__.py touch functional_tests/test_all_users.py

Sidenote :__init__.pyملف فارغ دائمًا تقريبًا. لمزيد من المعلومات حول ما يتم استخدامه ، راجع إجابة stackoverflow.

يمكننا أخيرًا البدء في كتابة أول اختبار وظيفي! الاختبارات الوظيفية مخصصة لاختبار أجزاء من الوظائف في تطبيق الويب الخاص بنا. يصف TDD مع Python الاختبارات الوظيفية بأنها "كيفية عمل التطبيق من وجهة نظر المستخدم".

لذلك دعونا نفتح test_all_users.pyالملف في محرر النصوص الخاص بنا. أولاً ، نريد استيراد محرك الويب من السيلينيوم ، ولجعل ذلك أسهل كثيرًا ، يوفر Django شيئًا يُعرف باسم StaticLiveServerTestCase للاختبار المباشر. دعنا نستورد كلاهما الآن:

from selenium import webdriver from django.contrib.staticfiles.testing import StaticLiveServerTestCase

نظرًا لأننا نختبر من منظور المستخدمين ، فلنسمي هذه الاختبارات NewVisitorTest. يضاف ما يلي:

class NewVisitorTest(StaticLiveServerTestCase): def setUp(self): self.browser = webdriver.Firefox() self.browser.implicitly_wait(2) def tearDown(self): self.browser.quit()

أولاً ، قمنا بإنشاء فئة StaticLiveServerTestCase باسم NewVisitorTest ، وسيحتوي هذا على اختباراتنا التي نريد تشغيلها لزائر جديد. بعد ذلك ، لدينا طريقتان باسم setUp و tearDown. يتم تهيئة طريقة setUp عندما نجري اختباراتنا. لذلك ، لكل اختبار نجريه ، نفتح Firefox وننتظر ثانيتين حتى يتم تحميل الصفحة. يتم تشغيل tearDown بعد الانتهاء من كل اختبار ، وهذه الطريقة تغلق المتصفح لنا بعد كل اختبار.

Now we can write our first test, and have Firefox open and close automatically for us. Let’s write our test now below the tearDown method.

 def test_home_title(self): self.browser.get('//localhost:8000') self.assertIn('Welcome to Django', self.browser.title)

Our first test, how exciting! Let’s walk through it. Every test we want to create must start with ‘test’. For example, if I wanted to create a test for my css, I would call the method test_h2_css. So here, we named the test test_home_title. That’s pretty self-explanatory, which is exactly what we want for our tests. The method first brings Firefox to the url //localhost:8000, and then it checks if ‘Welcome to Django’ is in the html head tags title.

Let’s run this test now and see what happens:

python manage.py test functional_tests

First, what exactly are we typing here? The manage.py script provides us with something called ‘test’, we will use this to run all of our tests. Here we are running it on our functional_tests package that we created with the __init__.py file.

After running this you should see something like the following in your terminal:

F ====================================================================== FAIL: test_home_title (functional_tests.test_all_users.NewVisitorTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "/Users/username/url/to/project/taskplanner/functional_tests/test_all_users.py", line 15, in test_home_title self.assertIn('Welcome to Django', self.browser.title) AssertionError: 'Welcome to Django' not found in 'Problem loading page' ---------------------------------------------------------------------- Ran 1 test in 4.524s FAILED (failures=1)

So it failed, but it gave us some handy advice. First, the AssertionError. ‘Welcome to Django’ not found in ‘Problem loading page’. So that means the title of //localhost:8000 was ‘Problem loading page’. If you navigate to the url, you will see that the web page was not available.

Let’s try running our Django server to get the test to pass. Switch back to the terminal tab that is in the taskplanner virtual environment and run our server.

python manage.py runserver

You should see something like the following:

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. March 06, 2016 - 20:53:38 Django version 1.9.4, using settings 'taskplanner.settings' Starting development server at //127.0.0.1:8000/ Quit the server with CONTROL-C.

Don’t worry about the unapplied migrations message yet.

Now that we have a server running on //localhost:8000, lets run our test again.

Go back to the other terminal tab that is in the taskplanner_test virtual environment and run the following once more:

python manage.py test functional_tests

You should see the following.

Creating test database for alias 'default'... . ---------------------------------------------------------------------- Ran 1 test in 4.033s OK Destroying test database for alias 'default'...

What We’ve Done So Far

Our first passing test!

We’ve covered a lot in this article. We created our first project, set up virtual environments for both development and testing purposes, wrote our first functional test, and followed the Test-driven development process by writing a failing test, and then making it making it pass.

Using starter templates

يمكنك توفير الكثير من الوقت عن طريق بدء مشروعك باستخدام نموذج django starter. تستخدم هذه المشاريع أفضل الممارسات التي ستوفر عليك الصداع لاحقًا عندما ينمو مشروعك. بعض المشاريع الأكثر شعبية هي

  • قطاعة البسكويت
  • بداية هاكاثون
  • حافة