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.
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.
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).
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.
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.
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