[PYTHON] Maintenance de l'environnement de développement Django + MongoDB (en cours d'écriture)

environnement

Installation

Créer virtualenv

mkvirtualenv -p /usr/bin/python2.7 [Nom du projet]

Installation de Django + MongoDB

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

installation de py.test

pip instal py.test
pip install django_pytest

Création de projet

cd [répertoire dev]
workon [Nom du projet]
django-admin.py startproject [Nom du projet]

Structure du répertoire

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

Création d'applications

cd [Racine du projet]/apps
#Pour le placement du modèle
django-admin.py startapp models

Enregistrement GitHub

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

Préparation de MongoDB

Paramètres du serveur

Création de répertoires et de paramètres

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

Démarrage du serveur

mongod run --config environment/dev/etc/mongod.conf

Initialisation du serveur

mongo
> use [Nom de la base de données]
> db.addUser('[Nom d'utilisateur DB]', '[Mot de passe DB]')

Modifier les paramètres de la base de données dans settings.py

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

Si vous obtenez une erreur SITE_ID

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',
)

Recommended Posts

Maintenance de l'environnement de développement Django + MongoDB (en cours d'écriture)
django ne peut pas être installé dans l'environnement de développement de pipenv + pyenv
Au milieu du développement, nous présenterons Alembic
Utilisation de TensorFlow dans l'environnement de développement intégré Cloud 9 - Principes d'utilisation -
Instanciation de l'environnement de développement BOX créé précédemment
L'histoire de l'affichage des fichiers multimédias dans Django
Environnement de développement en Python
[Memo] Environnement de développement Django
Utilisé depuis l'introduction de Node.js dans l'environnement WSL
Faire fonctionner mongoDB à partir de python dans l'environnement ubuntu ① Introduction de mongoDB
L'histoire de la création de l'environnement Linux le plus rapide au monde
Changer la valeur de paramètre de setting.py en fonction de l'environnement de développement
J'ai participé à l'activité de traduction du document officiel Django
Unifier l'environnement de l'équipe de développement Python en commençant par Poetry
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
Mémo de construction de l'environnement de développement Django
Commandes souvent utilisées dans l'environnement de développement lors de l'implémentation de Python
Résumé des points d'achoppement à Django pour la première fois
L'image est affichée dans l'environnement de développement local, mais l'image n'est pas affichée sur le serveur distant de VPS.
Développement de l'environnement Django sur Windows 10
(Note) Django dans l'environnement Vagrant
[Astuces] Problèmes et solutions dans le développement de python + kivy
construction de l'environnement de développement de projet django
Rendre le serveur SIP aussi concis que possible (au milieu de l'explication)
Supprimer les sauts de page au milieu d'un tableau avec sphinx single html
[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
Comment configurer l'environnement de développement d'ev3dev [version Windows]
L'histoire de la participation à AtCoder
[Django] Mémorandum de procédure de construction d'environnement
Implémentation de la fonction de connexion dans Django
[Pour les débutants] Django -Construction d'environnement de développement-
Changer la langue affichée dans Django 1.9
L'histoire du "trou" dans le fichier
Vérification de l'environnement de développement NAOqi Python
L'histoire de l'exportation d'un programme
Préparez l'environnement de développement avec anyenv
Récupérer la chaîne de requête (chaîne de requête) avec Django
Développement du site de publication d'évaluation des cartes MTG ~ Sortie de l'application Django dans 5 semaines ~
Lignes directrices pour se réincarner dans le monde du développement de programmation Linux (langage C / C ++)
pyenv + pyenv - Charge automatiquement l'environnement virtualenv dans l'environnement virtualenv
Considérez la description de Dockerfile (Django + MySQL②)
Installer Django dans l'environnement virtuel pipenv
Obtenez l'adresse IP du client avec Django
J'ai essayé le serveur asynchrone de Django 3.0
Ajout d'un environnement de développement local sur MacOS
Vérifiez le comportement du destroyer en Python
L'histoire d'une erreur dans PyOCR
Comprendre la commodité de Django Rest Framework
Django ~ Affichons-le sur le navigateur ~
Comment vérifier la version de Django
Gymnastique algorithmique 24 Milieu de la liste liée
Environnement CSS créé en 10 minutes avec Django
Implémenter une partie du processus en C ++
À propos de l'environnement virtuel de Python version 3.7
Créer un environnement d'exécution pour Jupyter Lab
Le résultat de l'installation de python sur Anaconda