mkvirtualenv -p /usr/bin/python2.7 [Projektname]
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 [Dev-Verzeichnis]
workon [Projektname]
django-admin.py startproject [Projektname]
cd [Projektstamm]
#Für die Bewerbung
mkdir apps
touch apps/__init__.py
#Testdaten etc.
mkdir fixtures
#Internationalisierte po/mo Dateispeicherung
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
#Vorlagenspeicher
mkdir templates
#Dokumentenspeicher
mkdir docs
cd [Projektstamm]/apps
#Zur Modellplatzierung
django-admin.py startapp models
cd [Projektstamm]
git config --global user.name "Nutzername"
git config --global user.email "Mail Adresse"
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
#Festlegen der Dateierstellung
cat <<EOF >> environment/dev/etc/mongod.conf
heredoc> # Store data
heredoc> dbpath = [Projektstamm]/environment/dev/var/mongodb
heredoc>
heredoc> # Only accept local connections
heredoc> bind_ip = 127.0.0.1
heredoc> EOF
#Verhindern Sie, dass die Entwicklungsdatenbank git betritt
cat << EOF >> environment/dev/var/mongodb/README
heredoc>Entwicklung MongoDB Datenspeicherung
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 [DB-Name]
> db.addUser('[DB-Benutzername]', '[DB-Passwort]')
settings.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '[DB-Name]', # Or path to database file if using sqlite3.
'USER': '[DB-Benutzername]', # Not used with sqlite3.
'PASSWORD': '[DB-Passwort]', # 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.
}
}
** Wenn USER und PASSWORD gesetzt sind, tritt in python manage.py test
ein Anmeldefehler bei DB auf.
Daher scheint es besser, USER = '' und PASSWORD = '' in der Entwicklungsumgebung festzulegen. ** ** **
syncdb
python manage.py syncdb
In MongoDB muss die ID ObjectID sein, aber Djangos SITE_ID ist standardmäßig 1, sodass der folgende Fehler auftritt.
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 Dann sollten Sie die ID erhalten, die in SITE_ID mit "python manage.py telleriteid" festgelegt werden soll, aber zu diesem Zeitpunkt ist in django_site kein Datensatz vorhanden, sodass ich ihn nicht erhalten kann.
Daher können Sie die Site wie folgt manuell erstellen.
python manage.py shell
>>> from django.contrib.sites.models import Site
>>> s = Site()
>>> s.save()
>>> quit()
python manage.py tellsiteid
Stellen Sie die SITE_ID, die Sie damit erhalten haben, in settings.py ein.
settings.py
SITE_ID = u'XXXXXXXXXXXXXXXXX'
Ich dachte, aber am Ende konnte ich nicht verhindern, dass dieser Fehler während des Tests auftritt.
Die Ursache ist django / contrib / sites / management.py. Hier wird beim Erstellen der Site pk = 1 zwangsweise eingefügt.
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)
Ich habe die Verwendung von django.contrib.auth und django.contrib.sites in INSTALL_APPS eingestellt, da dies problematisch ist.
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