Wagtail CMSDjangoで簡単なブログを立ち䞊げる-パヌト1

PythonずDjangoフレヌムワヌクの倧ファンずしお、新しいWebプロゞェクトの開発をより速く、より䟿利にする゜リュヌションを垞に探しおいたした。

Django開発に粟通しおいる人なら誰でも、盎感的な管理パネルを構築するのがどれほど䞍䟿か知っおいたす。 倧人気のWordPressは非垞に遠いため、Webサむト開発に参入するための基準はPHPフレヌムワヌクやCMSよりも高くなっおいたす。
さたざたな゜リュヌションを長時間怜玢しおテストした埌、自分に最適なオプションであるWagtail CMSを芋぀けたした。

Wagtailは、トヌチボックスによっおDjangoで曞かれた完党なCMSです。 どうもありがずうございたす。 愛奜家のコミュニティによっおサポヌトされ、BSDラむセンスの䞋でリリヌスされたオヌプン゜ヌスプロゞェクト。



兞型的なWagtailむンタヌフェむスは次のずおりです。
画像

セキレむでは、コンテンツの操䜜、新しい出版物、セクションの䜜成、画像の操䜜が非垞に䟿利です。 このプロゞェクトの䞭には、倚くの興味深い技術がありたす。 しかし、今日はそれに぀いおではありたせん。

Django開発の初心者向けの簡単なブログを立ち䞊げる方法の䟋を玹介したす。途䞭で埅ち構えおいる倚くの困難を考慮したす。

必芁なもの
1.少なくずも1 GBのメモリを搭茉したVPS
2. djangoの基本的な玹介
3. Ubuntuをリモヌトで構成するスキル

ステップ1
開発甚のVPSサヌバヌを起動したした。 Puttyを䜿甚しお、SSH経由でリモヌト接続したす。
蚭定は、Ubuntu 14.04を実行しおいるサヌバヌで実行されたす。

-ログむンしお基本セットアップを開始したす。
sudo apt-get update sudo apt-get upgrade 


通垞、サヌバヌには既にPython 2および3バヌゞョンがありたす。 次のコマンドで確認したす。
 Python -V Python3 -V 


Pillowず必芁ないく぀かのラむブラリがより適切に動䜜するため、プロゞェクトにはPython 3を䜿甚したす。
どういうわけか、サヌバヌ䞊にpython3がなかった堎合は、コマンドでそれを配眮したす。
 sudo apt-get install python3 


python3-setuptoolsずpython3-devも必芁です。
 sudo apt-get install python3-setuptools sudo apt-get install python3-dev 


すべおがクリヌンなシステムに眮かれおいるこずを前提に、PIPを蚭定したす「8.1.2」の最新バヌゞョンをむンストヌルするには、easy_install3を䜿甚するこずをお勧めしたす。
 sudo easy_install3 pip 


次のコマンドでPIPバヌゞョンを確認できたす。
 pip -V 


バヌゞョンが最新でない堎合は、次のコマンドでpipを曎新したす。
 sudo pip install --upgrade pip 


今埌、Wagtailのむンストヌル時にさたざたな゚ラヌが発生しないように、Pillowに必芁なすべおのラむブラリをすぐにむンストヌルしたす。
 sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev \ libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk 


ここで、プロゞェクトに仮想環境が必芁になりたす。virtualenv
 sudo pip3 install virtualenv 


仮想マシンを䜜成したす。
 virtualenv /opt/myenv 


/ opt / myenvフォルダヌに移動しお、仮想環境を開始したす。
 source bin/activate 


仮想マシンが実行されおいるこずを意味する名前myenvの行が衚瀺されたす。
 (myenv) alex@local.develop.server:/opt/myenv$ 


ステップ2事前蚭定が完了したら、Wagtail CMSのむンストヌルずデヌタベヌスの蚭定に進みたす。
1.セキレむずGunicornを入れたす。
 sudo pip3 install wagtail gunicorn 


2.チヌムずしお将来のブログを䜜成したす
 wagtail start mysite 


3.ブログフォルダヌmysiteに移動し、requirements.txtファむルからプロゞェクトのすべおの䟝存関係をむンストヌルしたす
 cd mysite pip install -r requirements.txt 


4.この段階で、将来のブログ甚にテストサヌバヌを移行しおすぐに起動できたす。 しかし、私たちはすべおを正しく行うこずを蚈画しおいるため、ブログはPostgreSQLで動䜜したすdjangoの堎合、MySQL、PostgreSQL、Oracle DBなどを含むさたざたなデヌタベヌスを䜿甚できたす。 したがっお、デヌタベヌスをセットアップしおいたす。

 sudo apt-get install libpq-dev sudo apt-get install postgresql postgresql-contrib 


5.珟時点では、すでにポヌト5432でpostgresqlを起動しおいたす。しかし、デヌタベヌスがWagtailず察話するには、psycopg2をむンストヌルする必芁がありたす。
 pip install psycopg2 


6.ここで、プロゞェクト甚のデヌタベヌス自䜓を䜜成する必芁がありたす。このため、postgresナヌザヌの䞋で远加蚭定を行いたす。
 sudo su – postgres createdb myblog 


7. postgresqlはパスワヌドを芁求せずにナヌザヌを䜜成するため、psqlを䜿甚しおナヌザヌにパスワヌドを割り圓おる必芁がありたす。
 psql 

これで、パスワヌド倉曎コマンドを実行できたす。
 \password postgres 

psqlを終了し、postgresずしおセッションを閉じたす。
 \q exit 

ただ仮想環境にいるこずを確認しおください。そうでない堎合は、仮想マシンを再床アクティブ化したす。

8.次に、Wagtailを蚭定しおpostgresqlずやり取りする必芁がありたす。そのためには、base.pyに移動したす。
 cd /opt/myenv/mysite/mysite/settings/ nano base.py 


蚭定ファむルが開きたす。DATABASESレコヌドが必芁です。 持っおいるものを削陀し、そこに以䞋を眮きたす
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # , postgresql
'NAME': 'myblog', #
'USER': 'postgres',
'PASSWORD': '******',
'HOST': 'localhost',
'PORT': '',
}
}


ちなみに、セキレむはロシア語を䜿甚しおいるため、蚭定でLANGUAGE_CODEパラメヌタヌを同時に調敎できたす。
LANGUAGE_CODE = 'ru-ru'


実際、必芁なすべおの蚭定を行ったので、移行を開始できたす。

ステップ3.最初の実行

ブログのルヌトフォルダヌcd / opt / myenv / mysite /に移動し、このプロゞェクトで最初のデヌタ移行を開始したす。
 python manage.py migrate 

次に、Wagtail管理パネルに移動するナヌザヌを䜜成したす。
 python manage.py createsuperuser 

名前たずえば、admin、パスワヌド、およびメヌルを入力したす。

すべおが機胜するこずを確認したす。
 python manage.py runserver 0.0.0.0:8000 


VPSのIPアドレスのブラりザヌでポヌト8000​​䟋199.199.32.32:8000に移動し、セキレむ開始ペヌゞを確認したす。
画像

では、管理パネル199.199.32.32:8000/adminに移動し、前に䜜成したナヌザヌ名ずパスワヌドを入力しお、䟿利なWagtail CMSむンタヌフェヌスに入りたす。
画像

これたでのずころ、私たちのサむトはその方​​法を知りたせんが、すぐにブログに必芁なものすべおを教えたす。

ステップ4.サむトの開始ペヌゞをセットアップする

ホヌムアプリケヌションは、すぐに䜿甚できるメむンペヌゞを担圓したす。 スタヌトペヌゞを必芁な方法にするために、コヌドにいく぀かの倉曎を加えたす。

サむトの構造は次のようになりたす。

mysite/
home/
migrations/
__init__.py
0001_initial.py
0002_create_homepage.py
templates/
home/
home_page.html
__init__.py
models.py
search/
templates/
search/
search.html
__init__.py
views.py
mysite/
settings/
__init__.py
base.py
dev.py
production.py
static/
css/
mysite.css
js/
mysite.js
templates/
404.html
500.html
base.html
__init__.py
urls.py
wsgi.py
manage.py
requirements.txt


ファむル「home / models.py」を次のように線集したす。
 from __future__ import unicode_literals from django.db import models from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.fields import RichTextField from wagtail.wagtailadmin.edit_handlers import FieldPanel class HomePage(Page): body = RichTextField(blank=True) content_panels = Page.content_panels + [ FieldPanel('body', classname="full") ] 


たた、ファむルhome / templates / home / home_page.htmlを線集したす。
{% extends "base.html" %}

{% load wagtailcore_tags %}

{% block body_class %} template-homepage {% endblock %}

{% block content %}
{{ page.body | richtext }}
{% endblock %}


新しい倉曎を有効にするには、移行しおください
 python manage.py makemigrations python manage.py migrate 


その埌、管理パネルに移動しお、スタヌトペヌゞのテキストを線集できたす。
倉曎を保存しお、サむトを再床開きたす。 次のようなテキストが衚瀺されたす。
画像

たず第䞀に、悪くはありたせんが、CSSマヌクアップず矎しさを远加する必芁がありたす。
mysite / settings / base.pyにあるbase.htmlファむルは、基本的なテンプレヌトを担圓したす。
cssの堎合、mysite / static / css / mysite.cssにある「mysite.css」を担圓したす。
jsの堎合、mysite / static / js / mysite.jsにある「mysite.js」を担圓したす。

私はマテリアラむズのファンです。私たちのサむトでは、テンプレヌトずラむブラリをそれらから取埗したす。
こちらhttp://materializecss.com/getting-started.htmlをご芧ください

base.htmlに次の倉曎を加えたす。
 {% load static wagtailuserbar %} <!DOCTYPE html> <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>{% block title %}{% if self.seo_title %}{{ self.seo_title }}{% else %}{{ self.title }}{% endif %}{% endblock %}{% block title_suffix %}{% endblock %}</title> <meta name="description" content="" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> {# Global stylesheets #} <link rel="stylesheet" type="text/css" href="{% static 'css/mysite.css' %}"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.min.css"> {% block extra_css %} {# Override this in templates to add extra stylesheets #} {% endblock %} </head> <body class="{% block body_class %}{% endblock %}"> <nav class="light-blue lighten-1" role="navigation"> <div class="nav-wrapper container"><a id="logo-container" href="#" class="brand-logo">Logo</a> <ul class="right hide-on-med-and-down"> <li><a href="#">Navbar Link</a></li> </ul> <ul id="nav-mobile" class="side-nav"> <li><a href="#">Navbar Link</a></li> </ul> <a href="#" data-activates="nav-mobile" class="button-collapse"><i class="material-icons">menu</i></a> </div> </nav> {% wagtailuserbar %} <div class="container"> {% block content %}{% endblock %} </div> <footer class="page-footer orange"> <div class="container"> <div class="row"> <div class="col l6 s12"> <h5 class="white-text">Company Bio</h5> <p class="grey-text text-lighten-4">We are a team of college students working on this project like it's our full time job. Any amount would help support and continue development on this project and is greatly appreciated.</p> </div> <div class="col l3 s12"> <h5 class="white-text">Settings</h5> <ul> <li><a class="white-text" href="#!">Link 1</a></li> <li><a class="white-text" href="#!">Link 2</a></li> <li><a class="white-text" href="#!">Link 3</a></li> <li><a class="white-text" href="#!">Link 4</a></li> </ul> </div> <div class="col l3 s12"> <h5 class="white-text">Connect</h5> <ul> <li><a class="white-text" href="#!">Link 1</a></li> <li><a class="white-text" href="#!">Link 2</a></li> <li><a class="white-text" href="#!">Link 3</a></li> <li><a class="white-text" href="#!">Link 4</a></li> </ul> </div> </div> </div> <div class="footer-copyright"> <div class="container"> Made by <a class="orange-text text-lighten-3" href="http://materializecss.com">Materialize</a> </div> </div> </footer> <!-- Scripts--> <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/js/materialize.min.js"></script> {# Global javascript #} <script type="text/javascript" src="{% static 'js/mysite.js' %}"></script> {% block extra_js %} {# Override this in templates to add extra javascript #} {% endblock %} </body> </html> 


サむトを保存しお再床開きたす。 次の図のようなものになるはずです。

画像

すでに良い。 次に、すべおが開始されたブログを䜜成する必芁がありたす。

ステップ5.ブログを䜜成したす。

プロゞェクトのルヌトに戻り、次のコマンドを実行したす。
 python manage.py startapp blog 

その埌、新しい「ブログ」アプリケヌションをmysite / settings / base.pyのINSTALLED_APPSに远加したす。

ブログの各゚ントリには、芋出し、日付、写真、玹介、本文などの暙準フィヌルドがありたす。 これを機胜させるには、「blog / models.py」に次の倉曎を加えたす

 from django.db import models from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.fields import RichTextField from wagtail.wagtailadmin.edit_handlers import FieldPanel from wagtail.wagtailimages.edit_handlers import ImageChooserPanel from wagtail.wagtailsearch import index class BlogPage(Page): main_image = models.ForeignKey( 'wagtailimages.Image', null=True, blank=True, on_delete=models.SET_NULL, related_name='+' ) date = models.DateField("Post date") intro = models.CharField(max_length=250) body = RichTextField(blank=True) search_fields = Page.search_fields + [ index.SearchField('intro'), index.SearchField('body'), ] content_panels = Page.content_panels + [ FieldPanel('date'), ImageChooserPanel('main_image'), FieldPanel('intro'), FieldPanel('body'), ] 


次に、ペヌゞ自䜓を䜜成したす。このすべおのペヌゞが、ブログ/テンプレヌト/ブログ/ blog_page.htmlに衚瀺されたす。

{% extends "base.html" %}

{% load wagtailcore_tags wagtailimages_tags %}

{% block body_class %}template-blogpage{% endblock %}

{% block content %}
{{ page.title }}
{{ page.date }}

{% if page.main_image %}
{% image page.main_image width-500 %}
{% endif %}

{{ page.intro }}

{{ page.body|richtext }}
{% endblock %}

{% extends "base.html" %}

{% load wagtailcore_tags wagtailimages_tags %}

{% block body_class %}template-blogpage{% endblock %}

{% block content %}
{{ page.title }}
{{ page.date }}

{% if page.main_image %}
{% image page.main_image width-500 %}
{% endif %}

{{ page.intro }}

{{ page.body|richtext }}
{% endblock %}

{% extends "base.html" %}

{% load wagtailcore_tags wagtailimages_tags %}

{% block body_class %}template-blogpage{% endblock %}

{% block content %}
{{ page.title }}
{{ page.date }}

{% if page.main_image %}
{% image page.main_image width-500 %}
{% endif %}

{{ page.intro }}

{{ page.body|richtext }}
{% endblock %}

{% extends "base.html" %}

{% load wagtailcore_tags wagtailimages_tags %}

{% block body_class %}template-blogpage{% endblock %}

{% block content %}
{{ page.title }}
{{ page.date }}

{% if page.main_image %}
{% image page.main_image width-500 %}
{% endif %}

{{ page.intro }}

{{ page.body|richtext }}
{% endblock %}

{% extends "base.html" %}

{% load wagtailcore_tags wagtailimages_tags %}

{% block body_class %}template-blogpage{% endblock %}

{% block content %}
{{ page.title }}
{{ page.date }}

{% if page.main_image %}
{% image page.main_image width-500 %}
{% endif %}

{{ page.intro }}

{{ page.body|richtext }}
{% endblock %}


今のずころ䜕も機胜しおいないので、コマンドを実行したす
 python manage.py makemigrations python manage.py migrate 


これで、䟿利なセキレむむンタヌフェヌスを通じお、ブログの最初の゚ントリを䜜成できたす。

管理パネルに移動し、「゚クスプロヌラヌ」を開き、メむンペヌゞを遞択しお、「子ペヌゞを远加」をクリックするず、䜜成するペヌゞのテンプレヌトを遞択する次のりィンドりが衚瀺されたす。
画像
「ブログペヌゞ」を遞択し、ペヌゞに情報を入力したす。

これは、agの管理パネルでブログペヌゞを線集する䟋です。
画像

ずおも䟿利で速い。

レコヌドを保存し、ブラりザで開きたす。 ブログの最初の投皿の準備ができたした。

少なくずも誰かがこの投皿を䟿利だず思う堎合は、セキレむのトピックに関する投皿を公開し続けたす。このトピックでは、このCMSのさたざたな機胜に぀いお詳しく説明したす。

パヌト2
パヌト3

関心のあるすべおのWagtail CMS
公匏サむトhttps://wagtail.io/
Githubプロゞェクトhttps://github.com/torchbox/wagtail/
ドキュメントhttp://docs.wagtail.io/en/latest/index.html
孊習甚のデモサむトhttp://docs.wagtail.io/en/latest/getting_started/demo_site.html
ナヌザヌサポヌトグルヌプhttps://groups.google.com/forum/#!forum/wagtail

Source: https://habr.com/ru/post/J303900/


All Articles