[PYTHON] Page DJango publiée sur heroku: Practice

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.

Avant de commencer à créer

Tout d'abord, entrez dans l'environnement virtuel virtualenv.

source venv/bin/activate

Connectez-vous à heroku.

heroku login

C'est acceptable.

Créer une application

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

Concevez votre application

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.

Création d'écran

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

Télécharger sur heroku

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

Page DJango publiée sur heroku: Practice
Publication du projet django développé dans Cloud9 sur heroku
Page DJango publiée sur heroku: Préparation mon point addictif
Déployer l'application Django sur Heroku
python + django + scikit-learn + mecab (1) avec heroku
Essayez Ajax sur la page Django
python + django + scikit-learn + mecab (2) avec heroku
Blog Django sur heroku: implémentation de la connexion
Déployer l'API Django avec heroku (mémo personnel)
Déployer l'application Django sur Heroku [Partie 2]
Déployer l'application Django sur Heroku [Partie 1]
Django Heroku Deploy 1
shimehari sur heroku
Django Heroku Deploy 2
mémo de déploiement heroku (Django)
Notes de céleri sur Django
Exécutez Django sur PythonAnywhere
Publiez votre application Django sur Amazon Linux + Apache + mod_wsgi
Mémo de déploiement de Django × Postgresql sur Docker vers Heroku
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Expérience sur la page d'administration)
Hello World avec Django
Notes diverses sur le déploiement de l'application django sur Heroku
Développement de l'environnement Django sur Windows 10
Installez Django sur Mac
Déployer le projet django sur heroku
Hello World (débutant) avec Django
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Page de création de décalage)
Comment déployer une application Django sur heroku en seulement 5 minutes