{ "info": { "author": "luciano de falco alfano", "author_email": "ldefalcoalfano@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 2.0", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "\n\n####################\ndjango-rstblog\n####################\n\n``django-rstblog`` is a Django app to manage a blog driven by articles written \nusing reStructuredText_, or Markdown_ or HTML_.\n\nThe basic idea is to adopt a *hybrid* publication model,\nhalfway between a static site (pure html) and a dynamic one (all inside a DB,\nas Wordpress_).\n\nIn practice, the author writes his article locally, at his/her PC, then\n\n* he puts a series of lines at the top of the article; they serve to\n categorize it, indicating the language used, the title, and other attributes ...\n* and a line of text, of fixed format, which separates the attributes from the \n article content.\n\nFinally he calls an address (URL) of the site that allows him to upload the article.\nIf the user is not logged in to the site, this address asks for user and password.\n\nWhen the article is uploaded to the site, ``rstblog`` uses its attributes\nto classify it in the database. The content of the article is not loaded\nin the DB; when necessary, it is resumed from the file uploaded on the site.\n\nIf the author wants to modify the content of the article (or its attributes),\nhe edits the file on his PC, then upload it again.\n\nWhy use rstblog?\n-----------------\n\nWhat are the reasons that led us to this design choice? The following:\n\n* we can always count on a local backup of all the contents of the site;\n* we can work without an Internet connection, and connect only when\n we want to upload;\n* the program is extremely light, it runs smoothly on servers with\n limited CPU capacity as with little RAM and HDU space (as long as accesses\n are contained, and we haven't this problem :-);\n* we do not renounce the flexibility and speed of research that a DB allows;\n* if we have a few articles [1]_ the DB can be implemented with the support library\n of Python (``sqlite3``), without using big programs (in the sense\n that they commit a lot of resources) as MySQL_, or PostgreSQL_, ...\n\nFeatures\n--------------\n\nThe features that the project currently implements are:\n\n* the index of articles, indicating the number of consultations\n of each article and the main attributes;\n* display of an article;\n* upload of an article;\n* complete reconstruction of the DB starting from the files of the articles uploaded to the site;\n* administration of the DB contents using the Django's admin interface;\n* articles may have translations, they can be present in more than one language;\n* indication of site statistics; in the sense of how many articles are\n loaded, how many languages \u00e2\u20ac\u2039\u00e2\u20ac\u2039are used, how many articles are present in each\n classification topic and language.\n\nCons\n-------\n\nWhat are the cons to the use of this environment? You must have a\ngood knowledge of Python/Django to:\n\n* customize the project to your needs;\n* install it in a production server.\n\nA (not so) quick start\n------------------------\n\n1. With a virtual env activated, load the needed requirements::\n\n pip install django-rstblog\n\n1. In your project setting.py file:\n\n 1.1. Add ``rstblog`` to your INSTALLED_APPS like this::\n\n INSTALLED_APPS = [\n ...\n 'django.contrib.sites', # django's sites framework \n 'fullurl', # django-fullurl\n ...\n 'rstblog',\n ]\n\n 1.2. check for presence of login parameters::\n\n ...\n LOGIN_REDIRECT_URL = '/' # It means home view\n LOGIN_URL = '/login/'\n ...\n\n 1.3. Add a RSTBLOG configuration section like this::\n\n RSTBLOG = {\n 'ARTICLES_DIR': os.path.join(BASE_DIR, \"contents\", \"articles\"), \n 'START_CONTENT_SIGNAL': '.. hic sunt leones', # BEWARE: string on a single line, without other characters\n 'languages': { 'en': 'englis', # 1st position is default language (functioning on py 3.6+)\n 'it': 'italian', },\n 'types': { 'article': 'article', # 1st position is default type (ok on py 3.6+)\n 'page': 'page', },\n 'FIELDS': {'markup',\n 'image',\n 'atype',\n 'language',\n 'title',\n 'created',\n 'modified',\n 'slug',\n 'category',\n 'published',\n 'offer_home',\n 'summary',\n 'authors',\n 'translation_of', },\n 'LIST_FIELDS': {'authors',},\n 'DT_FIELDS': { 'created',\n 'modified', },\n 'BOOL_FIELDS': { 'published',\n 'offer_home', },\n 'HOME_ITEMS': 10,\n }\n\n 1.4 check for presence of SITE_ID::\n\n ...\n SITE_ID = 1\n ...\n\n2. In your project urls.py file:\n\n 2.1. include the ``rstblog`` URLconf::\n\n from django.urls import include\n ...\n path('blog/', include('rstblog.urls', namespace='rstblog')),\n\n 2.2. check for presence of login url::\n\n from django.contrib.auth import views as auth_views\n ...\n path('login/', auth_views.LoginView.as_view(), name='login'),\n path('logout/', auth_views.LogoutView, {'next_page': settings.LOGIN_REDIRECT_URL}, name='logout'), \n ...\n\n3. About your project templates:\n\n 3.1. it must have a base.html template with this blocks\n used from rstblog templates::\n\n {% block title %}\n {% block meta %}\n {% block link %}\n {% block content %}\n\n 3.2. check for the presence of ``templates/registration/login.html``\n used in login.\n\n4. In your project directory (where live manage.py), create the \n directory ``contents/articles``\n\n5. Run `python manage.py migrate` to create the ``rstblog`` models.\n\n6. Start the development server and visit http://127.0.0.1:8000/admin/\n to create at least a ``Category`` with value **uncategorized** to load articles\n (you'll need the Admin app enabled).\n\n7. Start the development server and visit http://127.0.0.1:8000/blog/\n to show an empty list of articles.\n\n8. Prepare an article on your PC as this one::\n\n :markup: restructuredtext\n :title: article\n :language: en\n :slug: article\n :category: uncategorized\n\n .. hic sunt leones\n\n =========\n Article\n =========\n\n This is the article content.\n\n And this is a secod paragraph of the article.\n\n9. Visit http://127.0.0.1:8000/blog/load-article to load the previous article.\n\n10. Now, if you visit again http://127.0.0.1:8000/blog/ you get a list with\n an article, and if you click on title, you'll show it\n (url: http://127.0.0.1:8000/blog/show/article)\n\n\nThis work is distributed under a \n`MIT License `_\nlicense.\n\nReferences\n---------------\n\nThis project is `hosted on GitHub `_\nHere you will find the complete environment\nneeded to develop the ``django-rstblog`` app. It means: not only the app, but\neven a minimal django project that hosts it.\n\nAnd the full documentation is\n`hosted on Read the Docs `_.\n\n------------------------------\n\n.. _Python: http://www.python.org/\n.. _Django: https://www.djangoproject.com/\n.. _MySQL: https://dev.mysql.com/downloads/\n.. _PostgreSQL: https://www.postgresql.org/community/\n\n.. _reStructuredText: http://docutils.sourceforge.net/rst.html\n.. _Markdown: https://daringfireball.net/projects/markdown/syntax\n.. _HTML: https://www.w3.org/TR/2017/REC-html52-20171214/\n.. _Wordpress: https://wordpress.org/\n\n.. [1] Not so few: with hundreds articles, everything reacts well.\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/l-dfa/django-rstblog", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "django-rstblog", "package_url": "https://pypi.org/project/django-rstblog/", "platform": "", "project_url": "https://pypi.org/project/django-rstblog/", "project_urls": { "Homepage": "https://github.com/l-dfa/django-rstblog" }, "release_url": "https://pypi.org/project/django-rstblog/0.1.2/", "requires_dist": [ "docutils (==0.14)", "Django (==2.1.2)", "django-concurrency (==1.4)", "Markdown (==2.6.11)", "Pygments (==2.2.0)", "python-markdown-math (==0.6)" ], "requires_python": "", "summary": "A Django app to manage a blog driven by articles written using a markup language", "version": "0.1.2" }, "last_serial": 4420888, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "228a35358e52bbab2d3c2a4f30148b3f", "sha256": "27660b79fb518ce7c864099aa056377bcc3fca0500162aad3d721253739173b3" }, "downloads": -1, "filename": "django_rstblog-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "228a35358e52bbab2d3c2a4f30148b3f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 165869, "upload_time": "2018-09-22T23:34:19", "url": "https://files.pythonhosted.org/packages/04/62/ecd9a6c11d67653347772edc76bd08e6b0d1dee7072ed610753ebcbbf15e/django_rstblog-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cc35c203b9d4b2dad09d37ac1641e95", "sha256": "b946dac2e849e70e690e55452768c5d567bbd8da29c0db6862d9bc48af902901" }, "downloads": -1, "filename": "django-rstblog-0.1.0.tar.gz", "has_sig": false, "md5_digest": "8cc35c203b9d4b2dad09d37ac1641e95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 335848, "upload_time": "2018-09-22T23:34:21", "url": "https://files.pythonhosted.org/packages/cb/da/5d5d2482fe336b59fc17a470c16ee0509e9818ad85943f9a9b9e98eacf25/django-rstblog-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "c6526a6c61d3ce05149a99aa7e140307", "sha256": "2990784e9ad9d33101792038b074813581d79c33338333559b4a9b310a9f0358" }, "downloads": -1, "filename": "django_rstblog-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c6526a6c61d3ce05149a99aa7e140307", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 165906, "upload_time": "2018-09-24T16:27:20", "url": "https://files.pythonhosted.org/packages/50/73/fd1be90c5ee6bc5b48db2d64a7527c14dffdc3165c7a9fc97136f751d62d/django_rstblog-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "463351db2ca108b1a2af2534a69619ce", "sha256": "6914da2e813ec979c79f1ae994d65b5906feb903292f82e62cb3e3ef1a1de637" }, "downloads": -1, "filename": "django-rstblog-0.1.1.tar.gz", "has_sig": false, "md5_digest": "463351db2ca108b1a2af2534a69619ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 506852, "upload_time": "2018-09-24T16:27:23", "url": "https://files.pythonhosted.org/packages/7b/bf/9ce43912367a2291be8ecd338c62ea5d5df7d2f1607f99b29ec7f3d5d1e0/django-rstblog-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b95b1fde1ac345e894162920da84f8e7", "sha256": "35b701ab95231f569b1668eae976f084eacaf412589ad5ed708c58649f314faf" }, "downloads": -1, "filename": "django_rstblog-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b95b1fde1ac345e894162920da84f8e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 168527, "upload_time": "2018-10-26T22:14:41", "url": "https://files.pythonhosted.org/packages/10/ce/9e54e17789c886c9bae9f7a6cf149019fa53c76a015d52c851ccf6772980/django_rstblog-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5149c1c27b3b6681bacf84826286b8b", "sha256": "be10eecd9733a91753e6a26c4b4d8078cac61bd5650ebc8f2e88db3bdd9a9b47" }, "downloads": -1, "filename": "django-rstblog-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a5149c1c27b3b6681bacf84826286b8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 508864, "upload_time": "2018-10-26T22:14:44", "url": "https://files.pythonhosted.org/packages/90/57/3e3e556abd7220ba3e0c0a38dc49ae496be82bbf80992b53829a528cefbf/django-rstblog-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b95b1fde1ac345e894162920da84f8e7", "sha256": "35b701ab95231f569b1668eae976f084eacaf412589ad5ed708c58649f314faf" }, "downloads": -1, "filename": "django_rstblog-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b95b1fde1ac345e894162920da84f8e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 168527, "upload_time": "2018-10-26T22:14:41", "url": "https://files.pythonhosted.org/packages/10/ce/9e54e17789c886c9bae9f7a6cf149019fa53c76a015d52c851ccf6772980/django_rstblog-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5149c1c27b3b6681bacf84826286b8b", "sha256": "be10eecd9733a91753e6a26c4b4d8078cac61bd5650ebc8f2e88db3bdd9a9b47" }, "downloads": -1, "filename": "django-rstblog-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a5149c1c27b3b6681bacf84826286b8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 508864, "upload_time": "2018-10-26T22:14:44", "url": "https://files.pythonhosted.org/packages/90/57/3e3e556abd7220ba3e0c0a38dc49ae496be82bbf80992b53829a528cefbf/django-rstblog-0.1.2.tar.gz" } ] }