{% extends "base.html" %} {% block content %}
Suppose we have database db1, collelction user_collection1.
For each record, we have following fields:
name
: @stringgender
: @int, 1 stands for female, 0 for malelastlogin
: @datetimedisable
: @boolDownload sample data here: data_100.json
mongoimport -d db1 -c user_collection1 --file data_100.json
add djmongoreader
to INSTALLED_APPS
in settings.py
INSTALLED_APPS = ( ... 'djmongoreader', )
in setting.py
MONGO_READER_SETTINGS = { 'conn_str': os.getenv('MONGOLAB_URI', 'mongodb://127.0.0.1:27017/db1'), 'perm_check_func': 'sampleapp.security.my_mongocall_perm_check' }
two keys in dj-mongo-reader setting dict:
conn_str
: MongoDB connection URI (format)
. If you provide a database name in URI, you can fetch it by following code later.
from djmongoreader.models import mongoReader mongoReader.get_dbname_in_uri()
perm_check_func
: optional, permission check function for each query command.
e.g.
following permission check function make sure all mongo commands are limit to send to database db1 and collections with name starts with user
def my_mongocall_perm_check(req, db, col, cmd): if db != "db1": # limit db to db1 return False if not col.startswith("user"): # limit collection to transaction_.* return False return True
find
, status
, count
, exportcsv
In application's page query.html
(source code),
add:
{% templatetag openblock %} include 'dj-mongo-reader/table.html' {% templatetag closeblock %}
Create templates/dj-mongo-reader/table.html
(
source code),
modify the HTML elements in Django blockdj-mongo-rest-table
remember to add extends
statement.
{% templatetag openblock %} extends "dj-mongo-reader/core.html"{% templatetag closeblock %}
Code in views.py
(source code)to render the page
contains the form and result table.
from djmongoreader.models import mongoReader def query(request): context = RequestContext(request) _dbname = mongoReader.get_dbname_in_uri() dbname = _dbname if _dbname else "db1" args = {"db": dbname, "col": "user_collection1", "rowcount": 10, "sort": json.dumps({"name": -1}), "columns": "name,disable,gender,lastlogin", "columns_trans": json.dumps({"name": "user name", "lastlogin": "last login"}) } return render_to_response("query.html", args, context_instance=context)
These parameters provide an initial query and rendering options:
db
: @string, database name in MongoDB.
if you had provided database name in connection URI, you can fill the value here by mongoReader.get_dbname_in_uri().
col
: @string, collection name in MongoDB.rowcount
: @int, number of result in one page. optional, default: 50.sort
: @json_str, sort
statement .optional, default: no sort.
columns
: @string, columns show in the result table. format: field names connected by comma.
columns_trans
: @json_str, database field name to display name mapping. optional, default:
use database field name directly.
All these parameters passed to frontend will be assigned to same-named variables in Javascript, and can be modified by demands.
In query.html
(source code) or its
corresponding
Javascript file, for each field you want to make a
transformation, write a js function named in format <field name>_process
.
The function accept only one parameter, the raw value read from MongoDB.
1, Show Male if raw data in field gender
is 0, otherwise show Female
window.gender_process = function (val) { return (val ? 'Female' : 'Male'); };
2, Show different icon for field disable
field.
window.disable_process = function (val) { return (val ? '<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>' : '<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>'); };
/<db>/<collection>/exportcsv/
projection
, @dict, a dictionary of MongoDB field to the display name in CSVcriteria
: @json_str, optional, find statement in MongoDBsort
: @json_str, optional, sort statement in MongoDBexportfn
, @string, optional, you can specify the CSV file name, 'export.csv' by default/db1/dbcollection_1/exportcsv/?criteria={"gender":0}&sort={"name":-1}&projection={"name":"student name", "gender":"sex","lastlogin":"last login"}response
sex,student name,last login 0,user 39,2011-11-21 10:57:15.166000 0,user 41,2011-09-22 10:57:15.166000 0,user 43,2011-07-24 10:57:15.166000 0,user 45,2011-05-25 10:57:15.166000 0,user 47,2011-03-26 10:57:15.166000 0,user 49,2011-01-25 10:57:15.166000 0,user 51,2010-11-26 10:57:15.166000 0,user 53,2010-09-27 10:57:15.166000 0,user 55,2010-07-29 10:57:15.166000 ...