⬆️ ⬇️

Redsolution CMS: instructions for adding your module

Last fall, we wrote about our development - RedsolutionCMS . Development with the wrong name, because in fact it does not manage any content. At its core, RedsolutionCMS is a system for deploying and initially setting up web projects on Django. In this article I will try to show clearly all the advantages of our em ... RedsolutionCMS :)

Once we have a modular system, then we will add one more module to it. An example would be django-photologue - a module for publishing photo galleries to the site. Under the cut - tutorial how to write and publish the installer of your favorite (it does not have to be a photologue) module.





A few words about this module. It is a ready-made photo gallery for django. One of its advantages is:



admin panel:





Example of the module:



')

Part 1. Manual installation



To install photologue, you need to download the module manually or install it using

pip install django_photologue

Then you need to add the appropriate lines to the project.parts.py and urls.py files :

INSTALLED_APPS += [ # ...other installed applications, 'photologue', ] urlpatterns += patterns('', (r'^photologue/', include('photologue.urls')), ) 


After the database is initialized, you need to run the following command to initialize the photologue:

python manage.py plinit

Here you will be prompted to set the size of the images and their thumbnails and save these settings in the database.



Part 2. We write the installer



Now we will try to add the django-photologue module to the Redsolution CMS.

Create something like the following file tree:



django-photologue # if the module (django-photologue) is not yet published on PyPI.

Since we want urls and settings to be automatically added when the module is included in the project being created, the settings.pyt and urls.pyt files are written, from which the lines of code are directly extracted and added to the end of the project.sets and py and urls.py files , thanks to the following file:

make.py:

 from redsolutioncms.make import BaseMake class Make(BaseMake): def make(self): super(Make, self).make() cms_settings.render_to('settings.py', 'settings.pyt', {}) cms_settings.render_to('urls.py', 'urls.pyt', {}) make = Make() 


where

cms_settings.render_to (file_name, template_name, dictionary = None, mode = 'a +')

generates content at the end of the specified project file file_name using the specified template

Parameters:



Note that the settings.pyt and urls.pyt files mentioned above contain all the information necessary for the module’s functionality, i.e. are jung patterns.

For our example, these files will be rather short:

settings.pyt:

 # ---- photologue ---- INSTALLED_APPS += ['photologue'] 


urls.pyt:

 #----- Photologue urls ---- urlpatterns += patterns('', (r'^photologue/', include('photologue.urls')), ) 




Part 3. We publish the installer



In DESCRIPTION we place the description about the plug-in module, concisely and clearly.

MANIFEST.in - file for connecting media files to the project:

recursive-include redsolution_setup / templates * .pyt

setup.py is an installer file that defines all the meta information about a package, developer, license, files, etc. in the module, as well as you need to specify the "entry point", so that the CMS, after loading the module, understands how to configure it:

 setup( ... entry_points={ 'redsolutioncms': ['photologue = redsolution_setup', ], }, ... ) 


Now we publish the received module on PyPI. To do this, you need to register on the PyPI website, go to the project folder, in this case in redsolutioncms_photologue, and type:

python setup.py register

Then upload the project to the site:

python setup.py sdist upload

Now in Redsolution CMS on the second page when choosing a module, the photologue added by us will be displayed.

Congratulations!



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



All Articles