Cela fait un moment, mais je vais continuer avec Dernière fois.
Au fait, c'est ce que j'ai fait. Je continue de l'améliorer petit à petit. http://my-1st-django-blog.herokuapp.com/
Après avoir éliminé la dépendance
heroku ps:scale web=1
De
heroku open
Vous pouvez maintenant afficher la page "Cela a fonctionné!". Cette fois, je vais créer une simple page de blog à partir d'ici.
Tout d'abord, entrez dans l'environnement virtuel virtualenv.
source venv/bin/activate
Connectez-vous à heroku.
heroku login
C'est acceptable.
Accédez au répertoire du projet et créez une nouvelle application.
python ../manage.py startapp blog_in_heroku
Au fait, la structure des répertoires à ce stade ressemble à ceci (\ __init __.py et .pyc sont omis).
herokuDir(Procfile,venv,projectDir,manage.py,requirements.txt)
/projectDir(settings.py,urls.py,wsgi.py)
/appDir(admin.py,views.py,models.py,tests.py)
J'ai créé l'application dans le répertoire du projet simplement parce que je l'ai aimé.
Ensuite, ajoutez l'application créée à INSTALLED_APPS.
settings.py ######
INSTALLED_APPS = (
#…
'myproject.blog_in_heroku',
)
Configurez également la base de données. Il semble que postgreSQL soit facile à utiliser avec heroku, je n'ai donc pas hésité à l'utiliser. Modifiez la partie DATABASES comme suit.
import dj_database_url
DATABASES = {
'default': {
'ENGINE':u'django.db.backends.sqlite3',
'NAME’:’forlocal.sqlite',
},
}
DATABASES['default'] = dj_database_url.config() #Commentez lors du test local
Référence: http://momoto.github.io/blog/2013/08/16/deploying-django-1-dot-5-2-on-heroku/ Une fois que sqlite3 est spécifié, il sert à des tests dans l'environnement local (dans ce cas, ajoutez forlocal.sqlite à .gitignore). Bien sûr, vous pouvez l'écrire directement (je pense que c'est mieux).
Définissez le contenu à enregistrer dans la base de données avec models.py au format d'une classe.
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)
Si vous voulez savoir quel type de base de données DJango crée à partir de ces modèles,
python manage.py sql [appname]
Vous pouvez vérifier l'instruction SQL générée automatiquement par cette commande. Cependant, cette fois, la base de données est créée sur heroku, donc même si vous le faites sur votre propre PC, vous ne pouvez pas la vérifier. Si vous souhaitez exécuter une commande sur heroku, ajoutez `` heroku run '' au début. En d'autres termes, cela ressemble à ceci.
heroku run python manage.py sql [appname]
Il y a beaucoup d'autres choses que vous pouvez faire, c'est donc très pratique à retenir.
Si tel est le cas, `` heroku lance python manage.py syncdb '' de la même manière. Créez une base de données.
Comme cela s'est fait sans problème, j'ai d'abord défini URLconf.
urls.py ######
#..
urlpatterns = patterns('myproject.blog_in_heroku.views',
url( r'^$','top_page',name='Blog' ),
url( r'^new/$','new',name='New' ),
#Le nom est un peu différent du titre de la page ...?
Cette fois, il est très facile de simplement haut de page et de publier la page. Si vous souhaitez utiliser davantage la page administrateur, consultez Ici.
La vue ressemble à ceci: Créez un nouveau form.py en plus de views.py.
forms.py ######
#coding:utf-8
from django import forms
class EntryForm(forms.Form):
title = forms.CharField(
label = u'Titre',
)
body = forms.CharField(
label = u'Texte',
widget = forms.Textarea(),
)
Ici, j'utilise un module appelé forms of django qui n'apparaissait pas dans Tutorial.
CharField signifie probablement
par défaut. label est le label correspondant.
Il est également possible de spécifier le format dans Textarea comme cela se fait dans le corps.
Importez-le dans views.py et utilisez-le.
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(): #Vérifiez l'entrée
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']Le contenu est retiré individuellement du formulaire
new_entry.save()
return HttpResponseRedirect('/')
#Rediriger vers la première page après la publication
contexts = RequestContext(req,{
'form':form,
})
template = loader.get_template('blog_in_heroku/new.html')
return HttpResponse( template.render(contexts) )
En général, ce que vous avez appris dans le didacticiel est le même que ce que vous faites. Même si la nouvelle fonction a une méthode inconnue appelée clean_data, je peux imaginer ce qu'elle fait.
C'est la fin de la définition de la page. Enfin, créez l'écran réel.
Écrivez les deux modèles spécifiés dans la fonction de vue, index.html et new.html. J'ai également essayé d'utiliser Bootstrap entre parenthèses.
Je l'ai fait comme herokuDir / templates / blog_in_heroku / index.html`
, mais si les modèles et ci-dessous sont les mêmes, peu importe où vous le faites (bien que ce soit impossible en dehors de herokuDir).
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>Date de publication{{ row.create_date|date:"Y/m/d" }}</div>
<div>{{ row.body }}</div>
</p>
{% endfor %}
<a href="/new/">
<button type="button" class="btn btn-primary">Publier!</button>
</a>
</div>
</body>
</html>
new.html ######
<html>
<head>
<title>Publier</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="Publier!" />
<a href="/">
<button type="button" class="btn btn-warning">Annuler</button>
</a>
</td></tr>
</tbody></table>
</div>
</form>
</div>
</body>
</html>
Sur la page d'index, le contenu de la base de données est extrait un par un avec l'instruction for comme cela se fait souvent. Dans la partie "Date de publication"{{ row.create_date|date:”Y/m/d” }}
Il y a une description, mais entre les deux|"(Pipe) semble être utilisé lors d'un traitement simple sur une fonction modèle avec une fonction appelée filtre. On ne sait pas pour le moment combien de traitement peut être effectué. Eh bien, c'est un genre car il peut être traité côté script puis passé. C'est comme un raccourci pour.
La partie formulaire de la nouvelle page est une combinaison de ce qui a été défini dans la classe EntryForm de forms.py écrite précédemment en tant que variable de formulaire de views.py, et on a l'impression qu'elle est matérialisée ici (à cause de cela, la classe Bootstrap ne peut pas être attachée. Ça n'a pas l'air cool). Aussi {% csrf_token%}. Pour être honnête, je ne sais pas ce que je fais avec ça, mais je l'ai écrit pour le moment.
Enfin, nous devons indiquer à DJango où trouver le modèle.
settings.py ######
TEMPLATE_DIRS = (
'/app/templates',
)
La partie correspondant à herokuDir jusqu'à présent est un répertoire appelé app sur heroku. Ce qui suit est (probablement) facile à comprendre car il est exactement le même que mon environnement. À propos, cela a été confirmé par `` heroku run pwd '', etc.
Le reste coule
git add .
git commit -m “lets test”
git push heroku master
Et commencez.
heroku ps:scale web=1
Si cela réussit, la page est déjà ouverte. Ouvrons-le.
heroku open
Très amusant. Il semble qu'il n'y ait pas de frais pour cela seul, alors gardons-le tel quel pendant un moment.
Recommended Posts