This application is the backend part that manages and serves news for the QGIS welcome page.
-
create a virtual env
$ virtualenv qgisfeedvenv -
activate the virtual env:
$ source qgisfeedvenv/bin/activate -
install dependencies:
$ pip install -r REQUIREMENTS.txt -
create a postgresql DB:
$ createdb qgisfeed -
enable postgis:
$ psql qgisfeed -c 'CREATE EXTENSION postgis;' -
create
settings_local.pyand put your DB configuration as in the example below:DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'qgisfeed', 'USER': 'your_username', 'PASSWORD': 'your_password', 'HOST': 'localhost', 'PORT': '5432' } }
-
run migrations, from the
qgisfeedprojectdirectory:python manage.py migrate -
create an admin user and set a password:
$ python manage.py createsuperuser -
start the development server:
python manage.py runserver
To prevent DDOS attacks there is limit in the number of returned records (defaults to 20): it can be configured by overriding the settings in settings_local.py with:
QGISFEED_MAX_RECORDS=40 # default value is 20For email notifications, the sender address can be configured with:
QGISFEED_FROM_EMAIL='noreply@qgis.org'` # default value is 'noreply@qgis.org'See https://docs.djangoproject.com/en/2.2/topics/email/#module-django.core.mail for further email configuration.
Users with staff flag can enter the control panel at /admin and add feed entries, by default entries are not published.
Users with superadmin flag will be notified by email when an entry is added to the feed and will be able to publish the entry.
The application has a single endpoint available at the web server root / the reponse is in JSON format.
Example call: http://localhost:8000/
Returned data:
[
{
"pk": 1,
"title": "QGIS acquired by ESRI",
"image": "http://localhost:8000/media/feedimages/image.png",
"content": "<p>QGIS is finally part of the ESRI ecosystem, it has been rebranded as CrashGIS to better integrate with ESRI products line.</p>",
"url": "https://www.qgis.com",
"sticky": true,
"publish_from": 1557419128
},
{
"pk": 2,
"title": "Null Island QGIS Meeting",
"image": "",
"content": "<p>Let's dive in the ocean together!</p>",
"url": null,
"sticky": false,
"publish_from": 1557419128
},
{
"pk": 3,
"title": "QGIS Italian Meeting",
"image": "",
"content": "<p>Ciao from Italy!</p>",
"url": null,
"sticky": false,
"publish_from": 1557419128
}
]The following parameters can be passed by the client to filter available records.
Parameters are validated and in case they are not valid a Bad Request HTTP error code 400 is returned.
When after is passed, only the records that have been published after the given value will be returned.
Accepted values: unix timestamp (UTC)
Example call: http://localhost:8000/?after=1557419013
When lang is passed, the records that have a different lang will be excluded from the results. Only the records with null lang and the records with a matching lang will be returned.
Accepted values: ISO-939-1 two letters language code
Example call: http://localhost:8000/?lang=de
When lat and lon are passed, the records that have a location filter set will be returned only if the point defined by lat and lon is within record's location.
Accepted values: ESPG:4326 latitude and longitude
Example call: http://localhost:8000/?lat=44.5&lon=9.23
For development purposes only, you can run this application in debug mode with docker compose:
$ docker-compose -f docker-compose-testing.yml upA set of test data will be automatically loaded and the application will be available at http://localhost:8000
To enter the control panel http://localhost:8000/admin, two test users are available:
- Super Admin: the credentials are
admin/admin - Staff (News Entry Author): the credentials are
staff/staff
For production, you can run this application with docker compose:
Docker configuration should be present in .env file in the main directory,
an example is provided in env.template:
# This file can be used as a template for .env
# The values in this file are also the default values.
# Host machine persistent storage directory, this path
# must be an existent directory with r/w permissions for
# the users from the Docker containers.
QGISFEED_DOCKER_SHARED_VOLUME=/shared-volume
# Number of Gunicorn workers (usually: number of cores * 2 + 1)
QGISFEED_GUNICORN_WORKERS=4
# Database name
QGISFEED_DOCKER_DBNAME=qgisfeed
# Database user
QGISFEED_DOCKER_DBUSER=docker
# Database password
QGISFEED_DOCKER_DBPASSWORD=docker$ docker-compose -f docker-compose-production.yml upA set of test data will be automatically loaded and the application will be available at http://localhost:80
To enter the control panel http://localhost:80/admin, two test users are available:
- Super Admin: the credentials are
admin/admin - Staff (News Entry Author): the credentials are
staff/staff