[PYTHON] DJango-Seite veröffentlicht auf Heroku: Practice

Es ist eine Weile her, aber ich werde mit [Letztes Mal] fortfahren (http://qiita.com/juniskw/items/91afa1e4908b03659abb).

Das habe ich übrigens gemacht. Ich verbessere es immer noch nach und nach. http://my-1st-django-blog.herokuapp.com/

Nach der Beseitigung der Sucht

heroku ps:scale web=1

Von

heroku open

Sie können jetzt die Seite "Es hat funktioniert!" Anzeigen. Dieses Mal werde ich von hier aus eine einfache Blog-Seite erstellen.

Bevor Sie anfangen, ### zu machen

Geben Sie zunächst die virtuelle Umgebung virtualenv ein.

source venv/bin/activate

Melden Sie sich bei Heroku an.

heroku login

Das ist in Ordnung.

Anwendung erstellen

Wechseln Sie in das Projektverzeichnis und erstellen Sie eine neue Anwendung.

python ../manage.py startapp blog_in_heroku

Übrigens sieht die Verzeichnisstruktur in dieser Phase folgendermaßen aus (\ init.py- und .pyc-Systeme werden weggelassen).

herokuDir(Procfile,venv,projectDir,manage.py,requirements.txt)
 /projectDir(settings.py,urls.py,wsgi.py)
  /appDir(admin.py,views.py,models.py,tests.py)

Ich habe die Anwendung im Projektverzeichnis erstellt, einfach weil es mir gefallen hat.

Fügen Sie als Nächstes die erstellte Anwendung zu INSTALLED_APPS hinzu.

settings.py ######

INSTALLED_APPS = (
	#…
	'myproject.blog_in_heroku',
)

Richten Sie auch die Datenbank ein. Es scheint, dass postgreSQL mit Heroku einfach zu verwenden ist, daher habe ich nicht gezögert, es zu verwenden. Bearbeiten Sie den Teil DATABASES wie folgt.

import dj_database_url

DATABASES = {
	'default': {
		'ENGINE':u'django.db.backends.sqlite3',
		'NAME’:’forlocal.sqlite',
	},
}

DATABASES['default'] = dj_database_url.config()	#Beim Testen vor Ort auskommentieren

Referenz: http://momoto.github.io/blog/2013/08/16/deploying-django-1-dot-5-2-on-heroku/ Sobald sqlite3 angegeben ist, dient es zum Testen in der lokalen Umgebung (in diesem Fall fügen Sie forlocal.sqlite zu .gitignore hinzu). Natürlich können Sie es direkt schreiben (ich denke, es ist besser).

Entwerfen Sie Ihre Anwendung

Legen Sie den Inhalt, der in der Datenbank gespeichert werden soll, mit models.py im Format einer Klasse fest.

models.py ######

#..
class Entry(models.Model):
	title = models.CharField(max_length=150)
	body = models.TextField()
	create_date = models.DateTimeField(auto_now_add=True)
	update_date = models.DateTimeField(auto_now=True)

Wenn Sie wissen möchten, welche Art von Datenbank DJango aus diesen Modellen erstellt,

python manage.py sql [appname]

Sie können die von diesem Befehl automatisch generierte SQL-Anweisung überprüfen. Diesmal wird die Datenbank jedoch auf Heroku erstellt. Selbst wenn Sie dies auf Ihrem eigenen PC tun, können Sie sie nicht überprüfen. Wenn Sie einen Befehl auf heroku ausführen möchten, fügen Sie am Anfang `` `heroku run``` hinzu. Mit anderen Worten, es sieht so aus.

heroku run python manage.py sql [appname]

Es gibt viele andere Dinge, die Sie tun können, daher ist es sehr bequem, sich daran zu erinnern.

Wenn ja, `` `heroku run python manage.py syncdb``` auf die gleiche Weise. Erstellen Sie eine Datenbank.

Da es ohne Probleme gemacht wurde, habe ich zuerst URLconf gesetzt.

urls.py ######

#..
urlpatterns = patterns('myproject.blog_in_heroku.views',
	 url( r'^$','top_page',name='Blog' ),
	 url( r'^new/$','new',name='New' ),
	 #Der Name unterscheidet sich ein wenig vom Titel der Seite ...?

Diesmal ist es sehr einfach, nur die Top-Seite und die Post-Seite zu erstellen. Wenn Sie die Administratorseite weiter verwenden möchten, lesen Sie Hier.

Die Ansicht sieht folgendermaßen aus: Erstellen Sie zusätzlich zu views.py eine neue form.py.

forms.py ######

#coding:utf-8
from django import forms

class EntryForm(forms.Form):
	title = forms.CharField(
		label = u'Titel',
	)

	body = forms.CharField(
		label = u'Text',
		widget = forms.Textarea(),
	)

Hier verwende ich ein Modul namens Django-Formen, das nicht in Tutorial enthalten war. CharField bedeutet wahrscheinlich standardmäßig `<input type =“ text ”>`. label ist das entsprechende label. Es ist auch möglich, das Format in Textarea so anzugeben, wie es im Hauptteil erfolgt. Importieren Sie dies in views.py und verwenden Sie es.

views.py ######

from django.http import HttpResponse,HttpResponseRedirect
from django.template import loader,RequestContext


def top_page(req):
	from myproject.blog_in_heroku.models import Entry
	rows = Entry.objects.all().order_by('-create_date')

	contexts = RequestContext(req,{
		'rows':rows,
	})
	template = loader.get_template('blog_in_heroku/index.html')
	return HttpResponse( template.render(contexts) )


def new(req):
	from myproject.blog_in_heroku.forms import EntryForm

	if req.method == 'POST':
		form = EntryForm(req.POST)
	else:
		form = EntryForm()

	if form.is_valid():	#Überprüfen Sie die Eingabe
		from myproject.blog_in_heroku.models import Entry

		new_entry = Entry()

		new_entry.title = form.cleaned_data['title']
		new_entry.body = form.cleaned_data['body']
		# form.cleaned_data['name']Der Inhalt wird einzeln aus dem Formular entnommen

		new_entry.save()

		return HttpResponseRedirect('/')
		#Nach dem Posten zur obersten Seite umleiten

	contexts = RequestContext(req,{
		'form':form,
	})

	template = loader.get_template('blog_in_heroku/new.html')

	return HttpResponse( template.render(contexts) )

Im Allgemeinen ist das, was Sie im Tutorial gelernt haben, dasselbe wie das, was Sie tun. Obwohl es in der neuen Funktion eine unbekannte Methode namens bereinigte_Daten gibt, kann ich mir vorstellen, was ich tue.

Dies ist das Ende der Seitendefinition. Schließlich machen Sie den eigentlichen Bildschirm.

Screen Making

Schreiben Sie die beiden in der Ansichtsfunktion angegebenen Vorlagen, index.html und new.html. Ich habe auch versucht, Bootstrap in Klammern zu verwenden. Ich habe es wie "herokuDir / templates / blog_in_heroku / index.html" gemacht, aber wenn die Vorlagen und unten gleich sind, spielt es keine Rolle, wo Sie es machen (obwohl es außerhalb von herokuDir unmöglich ist).

index.html ######

<html>
	<head>
		<title>Blog</title>
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">
		<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap-theme.min.css">
		<script src="https://code.jquery.com/jquery.js"></script>
		<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
	</head>

	<body>
		<div class="container">

		{% for row in rows %}
			<p>
				<div>
					<h2>{{ row.title }}</h2>
				</div>
				<div>Datum der Veröffentlichung{{ row.create_date|date:"Y/m/d" }}</div>
				<div>{{ row.body }}</div>
			</p>
		{% endfor %}
			<a href="/new/">
				<button type="button" class="btn btn-primary">Post!</button>
			</a>

		</div>
	</body>
</html>

new.html ######

<html>
	<head>
		<title>Post</title>
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css">
		<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap-theme.min.css">
		<script src="https://code.jquery.com/jquery.js"></script>
		<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
	</head>

	<body>
		<div class="container">

			<form role="form" action="" method="post">
			{% csrf_token %}
				<div class="form-group">

					<table><tbody>
					{{form}}
						<tr><td cols="2">
							<input type="submit" class="btn btn-primary" value="Post!" />
							<a href="/">
								<button type="button" class="btn btn-warning">stornieren</button>
							</a>
						</td></tr>
					</tbody></table>

				</div>
			</form>

		</div>
	</body>
</html>

Auf der Indexseite wird der Inhalt der Datenbank nacheinander mit der for-Anweisung extrahiert, wie dies häufig der Fall ist. Im Teil "Buchungsdatum"{{ row.create_date|date:”Y/m/d” }}Es gibt eine Beschreibung, aber dazwischen|"(Pipe) scheint verwendet zu werden, wenn eine Vorlagenfunktion mit einer Funktion namens Filter einfach verarbeitet wird. Derzeit ist nicht bekannt, wie viel verarbeitet werden kann. Nun, es ist eine Art, da sie auf der Skriptseite verarbeitet und dann übergeben werden kann Es ist wie eine Abkürzung für.

Der Formularteil der neuen Seite ist eine Kombination dessen, was in der EntryForm-Klasse von forms.py definiert wurde, die zuvor als Formularvariable von views.py geschrieben wurde, und es scheint, als wäre sie hier materialisiert (aus diesem Grund kann die Bootstrap-Klasse nicht angehängt werden. Es sieht nicht cool aus). Auch {% csrf_token%}. Um ehrlich zu sein, ich weiß nicht, was ich damit mache, aber ich habe es vorerst geschrieben.

Schließlich müssen wir DJango mitteilen, wo sich die Vorlage befindet.

settings.py ######

TEMPLATE_DIRS = (
	'/app/templates',
)

Der Teil, der bisher herokuDir entspricht, ist ein Verzeichnis namens app on heroku. Das Folgende ist (wahrscheinlich) leicht zu verstehen, da es genau das gleiche ist wie meine Umgebung. Dies wurde übrigens durch "Heroku Run Pwd" usw. bestätigt.

Auf Heroku hochladen

Der Rest fließt

git add .
git commit -m “lets test”
git push heroku master

Und Start.

heroku ps:scale web=1

Wenn dies erfolgreich ist, ist die Seite bereits geöffnet. Lass es uns öffnen.

heroku open

Viel Spaß. Es scheint, dass dies allein keine Gebühr ist, also lassen wir es für eine Weile so, wie es ist.

Recommended Posts

DJango-Seite veröffentlicht auf Heroku: Practice
Veröffentlichtes Django-Projekt, entwickelt in Cloud9 auf Heroku
DJango-Seite auf Heroku veröffentlicht: Vorbereitung mein Suchtpunkt
Stellen Sie die Django-Anwendung auf Heroku bereit
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Probieren Sie Ajax auf der Django-Seite aus
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Django Blog auf Heroku: Login Implementierung
Stellen Sie Django api mit Heroku bereit (persönliches Memo)
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Stellen Sie die Django-App in Heroku bereit [Teil 1]
Django Heroku Deploy 1
Shimehari auf Heroku
Django Heroku Deploy 2
Heroku-Einsatznotiz (Django)
Sellerie-Notizen zu Django
Führen Sie Django auf PythonAnywhere aus
Veröffentlichen Sie Ihre Django-App unter Amazon Linux + Apache + mod_wsgi
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)
Hallo Welt mit Django
Verschiedene Hinweise zur Bereitstellung der Django-App auf Heroku
Entwicklung der Django-Umgebung unter Windows 10
Installieren Sie Django auf dem Mac
Stellen Sie das Django-Projekt für Heroku bereit
Hallo Welt (Anfänger) mit Django
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schichterstellungsseite)
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit