mkvirtualenv -p /usr/bin/python2.7 [Nom du projet]
pip install git+https://github.com/django-nonrel/django-nonrel.git@master
pip install git+https://github.com/django-nonrel/djangotoolbox.git@master
pip install git+https://github.com/django-nonrel/mongodb-engine.git@master
pip instal py.test
pip install django_pytest
cd [répertoire dev]
workon [Nom du projet]
django-admin.py startproject [Nom du projet]
cd [Racine du projet]
#Pour le placement de l'application
mkdir apps
touch apps/__init__.py
#Données de test, etc.
mkdir fixtures
#Po internationalisé/stockage de fichiers mo
mkdir -p local/ja/LC_MESSAGES
mkdir -p local/en/LC_MESSAGES
# Put project-specific requirements here.
# See http://pip-installer.org/requirement-format.html for more information.
mkdir requirements
# This directory is used to store static assets for
# your project. User media files (FileFields/ImageFields) are not stored here.
mkdir static
mkdir static/img
mkdir static/js
mkdir static/css
#Stockage de modèles
mkdir templates
#Stockage de documents
mkdir docs
cd [Racine du projet]/apps
#Pour le placement du modèle
django-admin.py startapp models
cd [Racine du projet]
git config --global user.name "Nom d'utilisateur"
git config --global user.email "adresse mail"
git init
git add *.py
git add app
git commit -m 'first commit'
git remote add origin [email protected]:USER_ID/REPO_NAME.git
git push -u origin master
mkdir -p environment/dev/var/mongodb
mkdir -p environment/dev/etc
#Création de fichier de configuration
cat <<EOF >> environment/dev/etc/mongod.conf
heredoc> # Store data
heredoc> dbpath = [Racine du projet]/environment/dev/var/mongodb
heredoc>
heredoc> # Only accept local connections
heredoc> bind_ip = 127.0.0.1
heredoc> EOF
#Empêcher la base de données de développement d'entrer dans git
cat << EOF >> environment/dev/var/mongodb/README
heredoc>Développement du stockage de données MongoDB
heredoc> EOF
cat << EOF >> environment/dev/var/mongodb/.gitignore
heredoc> /*
heredoc> /.*
heredoc> !README
heredoc> !.gitignore
heredoc> EOF
mongod run --config environment/dev/etc/mongod.conf
mongo
> use [Nom de la base de données]
> db.addUser('[Nom d'utilisateur DB]', '[Mot de passe DB]')
settings.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '[Nom de la base de données]', # Or path to database file if using sqlite3.
'USER': '[Nom d'utilisateur DB]', # Not used with sqlite3.
'PASSWORD': '[Mot de passe DB]', # Not used with sqlite3.
'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
'PORT': 27017, # Set to empty string for default. Not used with sqlite3.
}
}
** Si USER et PASSWORD sont définis, une erreur de connexion à la base de données se produit dans python manage.py test
.
Par conséquent, il semble préférable de définir USER = '' et PASSWORD = '' dans l'environnement de développement. ** **
syncdb
python manage.py syncdb
Dans MongoDB, l'ID doit être ObjectID, mais le SITE_ID de Django est 1 par défaut, donc l'erreur suivante se produit.
bson.errors.InvalidId: AutoField (default primary key) values must be strings representing an ObjectId on MongoDB (got u'1' instead). Please make sure your SITE_ID contains a valid ObjectId string.
http://django-mongodb.org/troubleshooting.html#site-id-issues
Ensuite, vous devriez obtenir l'ID à définir dans SITE_ID avec python manage.py tellsite id
, mais à ce stade, django_site n'a pas d'enregistrement en premier lieu, donc je ne peux pas l'obtenir.
Par conséquent, vous pouvez créer le site manuellement comme suit.
python manage.py shell
>>> from django.contrib.sites.models import Site
>>> s = Site()
>>> s.save()
>>> quit()
python manage.py tellsiteid
Définissez le SITE_ID que vous avez obtenu dans settings.py.
settings.py
SITE_ID = u'XXXXXXXXXXXXXXXXX'
J'ai pensé, mais à la fin je n'ai pas pu empêcher cette erreur d'apparaître pendant le test.
La cause est django / contrib / sites / management.py. Ici, pk = 1 est inséré de force lors de la création du site.
django/contrib/sites/management.py
def create_default_site(app, created_models, verbosity, db, **kwargs):
# Only create the default sites in databases where Django created the table
if Site in created_models and router.allow_syncdb(db, Site) :
if verbosity >= 2:
print "Creating example.com Site object"
# The default settings set SITE_ID = 1, and some tests in Django's test
# suite rely on this value. However, if database sequences are reused
# (e.g. in the test suite after flush/syncdb), it isn't guaranteed that
# the next id will be 1, so we coerce it. See #15573 and #16353. This
# can also crop up outside of tests - see #15346.
s = Site(pk=1, domain="example.com", name="example.com")
s.save(using=db)
Site.objects.clear_cache()
signals.post_syncdb.connect(create_default_site, sender=site_app)
J'ai arrêté d'utiliser django.contrib.auth et django.contrib.sites dans INSTALL_APPS parce que c'est un problème.
settings.py
INSTALLED_APPS = (
#'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
#'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)