لدى django-distill
الآن موقع ويب. اقرأ المزيد في:
django-distill
هو الحد الأدنى من المولد والناشر للمواقع الثابتة للتكوين لـ Django. يتم دعم معظم إصدارات Django ، ومع ذلك ، يُنصح الإصدارات المحدثة بما في ذلك إصدارات Django 3.x. django-distill
اعتبارًا من الإصدار 1.7 يدعم فقط Python 3. تم إسقاط دعم Python 2. إذا كنت بحاجة إلى دعم Python 2 ، فيرجى تثبيت django-distill
إلى الإصدار 1.6 في متطلباتك. txt أو pipfile. ينصح بيثون 3.6 أو فوق.
يمتد django-distill
مواقع Django الحالية مع القدرة على تصدير المواقع الثابتة تعمل بكامل طاقتها. إنها مناسبة للمواقع مثل المدونات التي تحتوي على واجهة أمامية ثابتة في الغالب ولكنك لا تزال ترغب في استخدام CMS لإدارة المحتوى.
يتكرر django-distill
على عناوين URL في مشروع Django الخاص بك باستخدام وظائف سهلة للكتابة لإعطاء المعلمات لأي صفحات تريد حفظها كـ HTML ثابتة. يمكن تحميل هذه الملفات الثابتة تلقائيًا على حاوية عن بُعد على طراز دلو مثل Amazon S3 أو Googe Cloud Files أو Microsoft Azure Storage ، أو مكتوبة إلى دليل محلي كإصدار ثابت محلي بالكامل من مشروعك. يمكن دمج توليد الموقع ، أو عملية التقطير ، بسهولة في سير عمل CI/CD للمواقع الثابتة للتخلص التلقائي. يمكن تعريف django-distill
على أنه امتداد لـ Django لجعل مشاريع Django متوافقة مع بنية موقع "Jamstack".
يتم توصيل django-distill
مباشرةً في إطار Django الحالي دون الحاجة إلى كتابة عارضين مخصصين أو رمز آخر أكثر مطوّلة. يمكنك أيضًا دمج django-distill
مع المواقع الديناميكية الموجودة وإنشاء صفحات ثابتة لقسم فرعي صغير من الصفحات بدلاً من الموقع بأكمله.
بالنسبة للملفات الثابتة على CDNS ، يمكنك استخدام مكتبة "ذاكرة التخزين المؤقت" التالية للسماح بتحديثات الوسائط الثابتة السريعة عند الضغط على التغييرات:
؟ Meeb/Django-Cachekiller
يوجد موقع مثال كامل ينشئ مدونة ثابتة ويستخدم django-distill
مع django-cachekiller
عبر النشر المستمر على NetLify المتاح هنا:
؟ مثيل MEEB/DJANGO-DISTILL
التثبيت من PIP:
$ pip install django-distill
أضف django_distill
إلى INSTALLED_APPS
في settings.py
الخاصة بك.
INSTALLED_APPS = [
# ... other apps here ...
'django_distill' ,
]
هذا كل شيء.
يقوم django-distill
بإنشاء صفحات ثابتة ، وبالتالي يتم دعم المشاهدات التي تسمح فقط بطلب GET
على طلبات إرجاع رمز الحالة HTTP 200
.
من المفترض أنك تستخدم معلمات URI مثل /blog/123-abc
وليس معلمات QueryString مثل /blog?post_id=123&title=abc
. لا معنى لها معلمات QueryString لتوليد الصفحات الثابتة لأسباب واضحة.
يتم نسخ ملفات الوسائط الثابتة مثل الصور وأوراق النمط من دليل الوسائط الثابتة المحددة في STATIC_ROOT
. هذا ./manage.py distill-local
أنك سترغب في تشغيل ./manage.py collectstatic
لا يقوم django-distill
بسلسلة هذا الطلب حسب التصميم ، ومع ذلك يمكنك تمكينه مع الوسيطة- --collectstatic
.
على افتراض أن لديك مشروع Django موجود ، قم بتحرير urls.py
لتضمين وظيفة distill_path
التي تحل محل وظيفة path
القياسي لـ Django ويدعم وسيطات الكلمات الرئيسية الجديدة distill_func
و distill_file
.
يجب تزويد وسيطة distill_func
بوظيفة أو فئة قابلة للاتصال التي تُرجع أو None
.
تكون وسيطة distill_file
اختيارية تمامًا وتتيح لك تجاوز عنوان URL الذي سيتم إنشاؤه من عكس regex عن عنوان URL. يتيح لك ذلك إعادة تسمية عناوين URL مثل /example
على أي اسم آخر مثل example.html
. اعتبارًا من v0.8 ، يتم تعديل أي URIs في مائل /
تعديل تلقائيًا لإنهاء /index.html
. يمكنك استخدام معلمات سلسلة التنسيق في distill_file
لتخصيص اسم الملف ، وسيتم استبدال قيم ARG من عنوان URL ، على سبيل المثال {}
لـ Args الموضعية أو {param_name}
لـ ARGS المسماة.
سيكون إعداد مثال لتطبيق التدوين النظري:
# Replaces the standard django.conf.path, identical syntax
from django_distill import distill_path
# Views and models from a theoretical blogging app
from blog . views import PostIndex , PostView , PostYear
from blog . models import Post
def get_index ():
# The index URI path, '', contains no parameters, named or otherwise.
# You can simply just return nothing here.
return None
def get_all_blogposts ():
# This function needs to return an iterable of dictionaries. Dictionaries
# are required as the URL this distill function is for has named parameters.
# You can just export a small subset of values here if you wish to
# limit what pages will be generated.
for post in Post . objects . all ():
yield { 'blog_id' : post . id , 'blog_title' : post . title }
def get_years ():
# You can also just return an iterable containing static strings if the
# URL only has one argument and you are using positional URL parameters:
return ( 2014 , 2015 )
# This is really just shorthand for ((2014,), (2015,))
urlpatterns = (
# e.g. / the blog index
distill_path ( '' ,
PostIndex . as_view (),
name = 'blog-index' ,
# Note that for paths which have no paramters
# distill_func is optional
distill_func = get_index ,
# '' is not a valid file name! override it to index.html
distill_file = 'index.html' ),
# e.g. /post/123-some-post-title using named parameters
distill_path ( 'post/<int:blog_id>-<slug:blog_title>.html' ,
PostView . as_view (),
name = 'blog-post' ,
distill_func = get_all_blogposts ),
# e.g. /posts-by-year/2015 using positional parameters
# url ends in / so file path will have /index.html appended
distill_path ( 'posts-by-year/<int:year>/' ,
PostYear . as_view (),
name = 'blog-year' ,
distill_func = get_years ),
)
سيظل موقعك يعمل بشكل متماثل مع التغييرات المذكورة أعلاه. داخليًا ، تتم إزالة معلمات distill_func
و distill_file
ويتم نقل عنوان URL إلى Django للمعالجة العادية. هذا ليس له تأثير أداء وقت التشغيل لأن هذا يحدث مرة واحدة فقط على بدء التطبيق.
إذا كان مسارك لا يحتوي على معايير URI ، مثل /
أو /some-static-url
فلا يتعين عليك تحديد معلمة distill_func
إذا كنت لا ترغب في ذلك. أما بالنسبة للمسارات التي بدون معلمات ، فإن distill_func
يرجع دائمًا None
، يتم تعيين هذا كسلوك افتراضي لـ distill_func
s.
يمكنك استخدام وظيفة distill_re_path
أيضًا ، والتي تحل محل وظيفة django.urls.re_path
الافتراضية. استخدامه مطابق لما ورد أعلاه:
from django_distill import distill_re_path
urlpatterns = (
distill_re_path ( r'some/regex'
SomeOtherView . as_view (),
name = 'url-other-view' ,
distill_func = some_other_func ),
)
إذا كنت تستخدم إصدارًا أقدم من Django في سلسلة 1.x ، فيمكنك استخدام وظيفة distill_url
بدلاً من ذلك والتي تحل محل وظائف django.conf.urls.url
أو django.urls.url
. استخدامه مطابق لما ورد أعلاه:
from django_distill import distill_url
urlpatterns = (
distill_url ( r'some/regex'
SomeView . as_view (),
name = 'url-view' ,
distill_func = some_func ),
)
يمكنك استخدام تنسيق سلسلة Python القياسية في distill_file
أيضًا لتمكينك من تغيير مسار ملف الإخراج لملف إذا كنت ترغب في ذلك. لاحظ أن هذا لا يقوم بتحديث عنوان URL المستخدم بواسطة Django ، لذا إذا كنت تستخدم هذا ، فتأكد من تطابق نمط path
الخاص بك بنمط distill_file
أو قد لا تعمل الروابط في Django. مثال:
# Override file path with parameters. Values are taken from the URL pattern
urlpatterns = (
distill_path ( 'post/<int:blog_id>-<slug:blog_title>.html' ,
PostView . as_view (),
name = 'blog-post' ,
distill_func = get_all_blogposts ,
distill_file = "post/{blog_id}-{blog_title}.html"
)
يجب أن تُرجع جميع المشاهدات التي يقدمها django-distill
إلى صفحات ثابتة رمز الحالة HTTP 200. إذا كنت بحاجة لأي سبب من الأسباب إلى تقديم طريقة عرض لا تُرجع رمز حالة HTTP 200 ، على سبيل المثال ، فأنت تريد أيضًا إنشاء صفحة من 404 تحتوي على طريقة عرض (بشكل صحيح) لإرجاع رمز حالة HTTP 404 ، يمكنك استخدام distill_status_codes
حجة اختيارية لعرض. على سبيل المثال:
from django_distill import distill_url
urlpatterns = (
distill_url ( r'some/regex'
SomeView . as_view (),
name = 'url-view' ,
distill_status_codes = ( 200 , 404 ),
distill_func = some_func ),
)
تقبل وسيطة distill_status_codes
الاختيارية مجموعة من رموز الحالة كمناسبات مسموح بها للعرض للعودة دون رفع خطأ. بشكل افتراضي ، تم تعيين هذا على (200,)
ولكن يمكنك تجاوزه إذا كنت بحاجة إلى موقعك.
سوف يعكس django-distill
أي نسختك المثبتة من Django ، وبالتالي ستتوقف وظيفة distill_url
في المستقبل عندما يقوم Django 2.x نفسه بإيقاف تشغيل django.conf.urls.url
و django.urls.url
. يمكنك استخدام distill_re_path
كبديل إسقاط. يُنصح باستخدام distill_path
أو distill_re_path
إذا كنت تقوم بإنشاء موقع جديد الآن.
يتم دعم التدويل فقط لعناوين URL ، لا يمكن ترجمة محتوى الصفحة ديناميكيًا. بشكل افتراضي ، سيتم إنشاء موقعك باستخدام قيمة LANGUAGE_CODE
في settings.py
. إذا قمت أيضًا بتعيين settings.USE_I18N
على True
i18n_patterns(...)
فقم بتعيين رموز لغة أخرى في settings.DISTILL_LANGUAGES
الخاصة بك. هذا يفترض أن موقعك متعدد اللغات يعمل كما هو متوقع قبل إضافة django-distill
.
على سبيل المثال ، إذا قمت بتعيين settings.LANGUAGE_CODE = 'en'
سيتم إنشاء موقعك بلغة واحدة.
إذا كان لديك شيء مثل هذا في settings.py
الخاصة بك
USE_I18N = True
DISTILL_LANGUAGES = [
'en' ,
'fr' ,
'de' ,
]
أثناء استخدام i18n_patterns
أيضًا في urls.py
مثل ذلك:
from django . conf . urls . i18n import i18n_patterns
from django_distill import distill_path
urlpatterns = i18n_patterns (
distill_path ( 'some-file.html' ,
SomeView . as_view (),
name = 'i18n-view' ,
distill_func = some_func
)
)
ثم سيتم إنشاء وجهات نظرك as /en/some-file.html
، /fr/some-file.html
و /de/some-file.html
. يجب أن تعمل عناوين URL هذه (ويتم ترجمتها) حسب موقعك بالفعل. لا يقوم django-distill
بأي سحر ترجمة ، فهو يدعو عناوين URL فقط مع بادئة رمز اللغة.
ملاحظة: django-distill
settings.LANGUAGES
أن الطريقة المقترحة الافتراضية هي استخدام settings.DISTILL_LANGUAGES
قد تحتاج إلى إنشاء قائمة بجميع عناوين URL المسجلة مع django-distill
. على سبيل المثال ، لديك مدونة تم إنشاؤها بشكل ثابت مع بضع مئات من الصفحات وتريد سرد جميع عناوين URL بسهولة في sitemap.xml
أو قائمة أخرى مماثلة لجميع عناوين URL. يمكنك لف عرض sitemap الخاص بك في distill_path
ثم تكرار جميع منطق توليد عنوان URL الخاص بك عن طريق استيراد وجهات نظرك distill_func
من urls.py
وتوليدها يدويًا ، ولكن بالنظر إلى أن هذا متاعب للغاية ، هناك مساعد مدمج لإنشاء كل ما تبذلونه عناوين URL التي سيتم تقطيرها لك.
from django_distill import distilled_urls
for uri , file_name in distilled_urls ():
# URI is the generated, complete URI for the page
print ( uri ) # for example: /blog/my-post-123/
# file_name is the actual file name on disk, this may be None or a string
print ( file_name ) # for example: /blog/my-post-123/index.html
لاحظ أن distilled_urls()
سيعود فقط عناوين URL بعد أن تم تحميل جميع عناوين URL في urls.py
باستخدام distill_path(...)
.
distill-local
بمجرد أن تغلف عناوين URL التي تريد إنشاءها بشكل ثابت ، يمكنك الآن إنشاء موقع ثابت كامل يعمل مع:
$ ./manage.py distill-local [optional /path/to/export/directory]
تحت الغطاء ، يكرر هذا ببساطة جميع عناوين URL المسجلة بـ distill_url
وينشئ الصفحات لهم باستخدام أجزاء من إطار اختبار Django لطلبات محاكاة ساخرة. بمجرد تقديم صفحات الموقع ، يتم نسخ الملفات من STATIC_ROOT
. يتم استبدال الملفات الموجودة بنفس الاسم في الدليل الهدف ويتم حذف ملفات الأيتام.
يدعم distill-local
الوسائط الاختيارية التالية:
--collectstatic
: قم بتشغيل collectstatic
تلقائيًا على موقعك قبل تقديمه ، هذا مجرد اختصار لتوفيره لكتابة أمر إضافي.
--quiet
: تعطيل جميع الإخراج بخلاف طرح أسئلة التأكيد.
--force
: افترض "نعم" لجميع أسئلة التأكيد.
--exclude-staticfiles
: لا تقم بنسخ أي ملفات ثابتة على الإطلاق ، فقط قم بإخراج الإخراج من طرق عرض Django.
--parallel-render [number of threads]
: عرض الملفات بالتوازي على مؤشرات الترابط المتعددة ، يمكن أن يسرع هذا العرض. الإعدادات الافتراضية إلى سلسلة 1
.
--generate-redirects
: محاولة إنشاء عمليات إعادة توجيه ثابتة مخزنة في تطبيق django.contrib.redirects
. إذا كان لديك إعادة توجيه من /old/
إلى / /new/
/new/
باستخدام هذا العلامة ، فسيقوم بإنشاء html ثابت <meta http-equiv="refresh" content="...">
/old/index.html
/new/
.
ملاحظة إذا كان أي من طرق العرض الخاصة بك يحتوي على خطأ Python ، فسوف يفشل التقديم ، فسيتم طباعة تتبع المكدس إلى المحطة وسيخرج أمر العرض برمز الحالة 1.
distill-publish
$ ./manage.py distill-publish [optional destination here]
إذا قمت بتكوين وجهة نشر واحدة على الأقل (انظر أدناه) ، فيمكنك استخدام أمر distill-publish
لنشر الموقع إلى موقع بعيد.
سيؤدي ذلك إلى تزامن كامل ، وإزالة أي ملفات عن بعد لم تعد موجودة في الموقع الثابت الذي تم إنشاؤه وتحميل أي ملفات جديدة أو تم تغييرها. سيتم بناء الموقع في دليل مؤقت محليًا أولاً عند النشر الذي يتم حذفه بمجرد نشر الموقع. سيتم التحقق من كل ملف أنه تم نشره بشكل صحيح من خلال طلبه عبر PUBLIC_URL
.
يدعم distill-publish
الحجج الاختيارية التالية:
--collectstatic
: قم بتشغيل collectstatic
تلقائيًا على موقعك قبل تقديمه ، هذا مجرد اختصار لتوفيره لكتابة أمر إضافي.
--quiet
: تعطيل جميع الإخراج بخلاف طرح أسئلة التأكيد.
--force
: افترض "نعم" لجميع أسئلة التأكيد.
--exclude-staticfiles
: لا تقم بنسخ أي ملفات ثابتة على الإطلاق ، فقط قم بإخراج الإخراج من طرق عرض Django.
--skip-verify
: لا تختبر ما إذا كان يتم تحميل الملفات بشكل صحيح على الخادم.
--ignore-remote-content
: لا تقم بإحضار قائمة الملفات عن بُعد. وهذا يعني أنه سيتم تحميل جميع الملفات ، ولن يتم حذف أي ملف عن بعد موجود. يمكن أن يكون هذا مفيدًا إذا كان لديك الكثير من الملفات على الخادم البعيد ، وكنت تعلم أنك تريد تحديث معظمها ، ولا تهتم إذا بقيت الملفات القديمة على الخادم.
--parallel-publish [number of threads]
: نشر الملفات بالتوازي على مؤشرات الترابط المتعددة ، يمكن أن يسرع النشر. الإعدادات الافتراضية إلى سلسلة 1
.
--parallel-render [number of threads]
: عرض الملفات بالتوازي على مؤشرات الترابط المتعددة ، يمكن أن يسرع هذا العرض. الإعدادات الافتراضية إلى سلسلة 1
.
--generate-redirects
: محاولة إنشاء عمليات إعادة توجيه ثابتة مخزنة في تطبيق django.contrib.redirects
. إذا كان لديك إعادة توجيه من /old/
إلى / /new/
/new/
باستخدام هذا العلامة ، فسيقوم بإنشاء html ثابت <meta http-equiv="refresh" content="...">
/old/index.html
/new/
.
لاحظ أن هذا يعني أنه إذا كنت تستخدم --force
و --quiet
أن دليل الإخراج سيكون له جميع الملفات وليس جزء من تصدير الموقع المحذوفة دون أي تأكيد.
ملاحظة إذا كان أي من طرق العرض الخاصة بك يحتوي على خطأ Python ، فسوف يفشل التقديم ، فسيتم طباعة تتبع المكدس إلى المحطة وسيخرج أمر العرض برمز الحالة 1.
distill-test-publish
$ ./manage.py distill-test-publish [optional destination here]
سيقوم هذا بالاتصال بهدف النشر الخاص بك ، ويصادق عليه ، وتحميل ملف مسمى عشوائيًا ، والتحقق من وجوده على PUBLIC_URL
ثم حذفه مرة أخرى. استخدم هذا للتحقق من إعدادات النشر الخاصة بك صحيحة.
distill-test-publish
ليس له حجج.
يمكنك تعيين settings.py
الاختيارية التالية.
distill_dir : سلسلة ، الدليل الافتراضي للتصدير إلى:
DISTILL_DIR = '/path/to/export/directory'
Distill_publish : يدعم القاموس ، مثل settings.DATABASES
Django. Databases ، default
:
DISTILL_PUBLISH = {
'default' : {
... options ...
},
'some-other-target' : {
... options ...
},
}
distill_skip_admin_dirs : Bool ، الافتراضيات إلى True
DISTILL_SKIP_ADMIN_DIRS = True
قم بتعيين DISTILL_SKIP_ADMIN_DIRS
إلى False
إذا كنت تريد أن ينسخ django-distill
أيضًا على الملفات الثابتة في دليل static/admin
. عادة ، هذه ليست مطلوبة أو مطلوبة للمواقع التي تم إنشاؤها بشكل ثابت. السلوك الافتراضي هو تخطي ملفات المسؤول الثابتة.
distill_skip_staticfiles_dirs : قائمة ، افتراضات إلى []
DISTILL_SKIP_STATICFILES_DIRS = [ 'some_dir' ]
DISTILL_SKIP_STATICFILES_DIRS
إلى قائمة بأسماء الدليل التي تريد django-distill
لتجاهل الدلائل في الدليل static/
المحدد. يمكنك استخدام هذا لتجاهل أدلة النسخ التي تحتوي على ملفات من التطبيقات التي لا تستخدمها والتي يتم تجميعها في الدليل static/
الدليل عن طريق collect-static
. على سبيل المثال ، إذا قمت بتعيين DISTILL_SKIP_STATICFILES_DIRS
إلى ['some_dir']
سيتم تخطي دليل الملفات الثابتة static/some_dir
.
distill_languages : قائمة ، افتراضات إلى []
DISTILL_LANGUAGES = [
'en' ,
'fr' ,
'de' ,
]
قم بتعيين DISTILL_LANGUAGES
على قائمة من رموز اللغة لمحاولة تقديم عناوين URL معها. راجع قسم "التدويل" لمزيد من التفاصيل.
إذا كنت تستخدم بيئة تطوير محلية تدعم HTTPS ، فقد تحتاج إلى إضافة SECURE_SSL_REDIRECT = False
في settings.py
احرص على منع CommandError
يتم رفعه عند إرجاع الطلب إلى إعادة توجيه 301 بدلاً من رمز استجابة HTTP/200 المتوقع.
اعتبارًا من django-distill
الإصدار 3.0.0
يمكنك استخدام طريقة django_distill.renderer.render_single_file
لكتابة ملف واحد إلى القرص باستخدام django_distill
. يعد هذا مفيدًا لكتابة الملفات الفردية إلى القرص ، على سبيل المثال ، لديك موقع Django يحتوي على بعض الملفات الثابتة في دليل كتبه django_distill
ولكن بقية الموقع هو موقع Django ديناميكي عادي. يمكنك تحديث ملف HTML ثابت في كل مرة يتم فيها حفظ مثيل نموذج. يمكنك استخدام كتابة ملف واحد مع إشارات لتحقيق ذلك. على سبيل المثال:
# in models.py
from django . db . models . signals import post_save
from django . dispatch import receiver
from django_distill . renderer import render_single_file
@ receiver ( post_save , sender = SomeBlogPostModel )
def write_blog_post_static_file_post_save ( sender , ** kwargs ):
render_single_file (
'/path/to/output/directory' ,
'blog-post-view-name' ,
blog_id = sender . pk ,
blog_slug = sender . slug
)
يشبه بناء الجملة لـ render_single_file
url.reverse
الخاص بـ Django. واجهة الاستخدام الكاملة هي:
render_single_file (
'/path/to/output/directory' ,
'view-name-set-in-urls-py' ,
* view_args ,
** view_kwargs
)
على سبيل المثال ، إذا كان لديك عنوان URL نشر المدونة على أنه:
# in urls.py
distill_path ( 'post/<int:blog_id>_<slug:blog_slug>.html' ,
PostView . as_view (),
name = 'blog-post' ,
distill_func = get_all_blogposts ),
سيكون استخدامك:
render_single_file (
'/path/to/output/directory' ,
'blog-post' ,
blog_id = 123 ,
blog_slug = 'blog-title-slug' ,
)
التي من شأنها أن تكتب محتويات /post/123_blog-title-slug.html
إلى /path/to/output/directory
كملف/path/to/output/ /path/to/output/directory/post/123_blog-title-slug.html
/post/123_blog-title-slug.html. لاحظ أن أي توجيهات فرعية مطلوبة ( /path/to/output/directory/post
في هذا المثال) سيتم إنشاؤها تلقائيًا إذا لم تكن موجودة بالفعل. تنطبق جميع قواعد django-distill
، مثل عناوين URL التي تنتهي في /
سيتم حفظها As /index.html
بحيث تكون منطقية بالنسبة للملف المادي على القرص.
لاحظ أيضًا أنه لا يمكن استيراد render_single_file
واستخدامها إلا في مشروع Django تم تهيئته.
يمكنك نشر مواقع تلقائيًا إلى مختلف الأهداف عن بُعد المدعومة من خلال الخلفية تمامًا مثل كيفية استخدام MySQL و SQLite و PostgreSQL وما إلى ذلك مع Django عن طريق تغيير محرك قاعدة بيانات الخلفية. حاليا المحركات التي يدعمها django-distill
هي:
django_distill.backends.amazon_s3 : نشر إلى دلو Amazon S3. يتطلب مكتبة Python boto3
( $ pip install django-distill[amazon]
). يجب أن يكون الدلو موجودًا بالفعل (استخدم لوحة التحكم AWS). خيارات:
'some-s3-container' : {
'ENGINE' : 'django_distill.backends.amazon_s3' ,
'PUBLIC_URL' : 'http://.../' ,
'ACCESS_KEY_ID' : '...' ,
'SECRET_ACCESS_KEY' : '...' ,
'BUCKET' : '...' ,
'ENDPOINT_URL' : 'https://.../' , # Optional, set to use a different S3 endpoint
'DEFAULT_CONTENT_TYPE' : 'application/octet-stream' , # Optional
},
django_distill.backends.google_storage : نشر إلى دلو تخزين السحابة من Google. يتطلب مكتبات Python google-api-python-client
و google-cloud-storage
( $ pip install django-distill[google]
). يجب أن يكون الدلو موجودًا بالفعل ويتم إعداده لاستضافة موقع ويب ثابت عام (استخدم لوحة التحكم في Google Cloud). خيارات:
'some-google-storage-bucket' : {
'ENGINE' : 'django_distill.backends.google_storage' ,
'PUBLIC_URL' : 'https://storage.googleapis.com/[bucket.name.here]/' ,
'BUCKET' : '[bucket.name.here]' ,
'JSON_CREDENTIALS' : '/path/to/some/credentials.json' ,
},
لاحظ أن JSON_CREDENTIALS
اختياري ؛ إذا لم يتم تحديد ذلك ، فستجرب مكتبات Google طرق مصادقة أخرى ، في ترتيب البحث الموضح هنا: https://cloud.google.com/docs/authentication/application-default-credentials (على سبيل GOOGLE_APPLICATION_CREDENTIALS
حساب ، إلخ).
django_distill.backends.microsoft_azure_storage : نشر إلى حاوية تخزين Microsoft Azure Blob. يتطلب Bython Library azure-storage-blob
( $ pip install django-distill[microsoft]
). يجب أن يكون حساب التخزين موجودًا بالفعل ويتم إعداده لاستضافة موقع ويب ثابت عام (استخدم لوحة التحكم في Microsoft Azure). خيارات:
'some-microsoft-storage-account' : {
'ENGINE' : 'django_distill.backends.microsoft_azure_storage' ,
'PUBLIC_URL' : 'https://[storage-account-name]...windows.net/' ,
'CONNECTION_STRING' : '...' ,
},
لاحظ أن كل حساب تخزين Azure يدعم موقع ويب ثابت واحد باستخدام $web
وهو المكان الذي سيحاول فيه django-distill
نشر موقعك.
يوجد الحد الأدنى من جناح الاختبار ، يمكنك تشغيله عن طريق ربط هذا المستودع ، وتثبيت الاعترافات المطلوبة في requirements.txt
ثم execuiting:
# ./run-tests.py
جميع طلبات السحب المنسقة والمعقولة والمشكلات والتعليقات بشكل صحيح.