python+Django Web開発例
I. プロジェクトの作成
初めてDjangoを使うのであれば、初期設定をしなければなりません。つまり、以下のような、データベースの設定、Django の詳細なオプション設定、アプリケーションの機能設定を含む Django プロジェクトの設定一式であるコードを自動生成して、Django プロジェクトを作成するのです。
<スパン
1. 新しいDjangoプロジェクトを作成する
sqliteデータベースの選択
<スパン
2. サイトモジュールアプリの作成
<スパン
3. 新しく作成したモジュールが動作することをテストする
Validating models...
0 errors found
March 12, 2014 - 10:26:53
Django version 1.6.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
サーバが立ち上がったら、ブラウザで URL: http://127.0.0.1:8000 を入力すると、心地よい、柔らかい、水色の "Welcome to Django" ページが表示されるはずです。これは正しく動作していることを意味します!
mysiteが作成したものを見てみましょう。
ファイルは
<スパン
a. 外側のmysiteディレクトリは、プロジェクトのコンテナに過ぎません。ディレクトリ名は Django にとっては重要ではなく、好きな名前に変更することができます。
b. manage.py。この Django プロジェクトと様々な方法で対話することができる便利なコマンドラインツールです。
c. 内側のmysiteディレクトリは、プロジェクト内の実際のPythonパッケージです。ディレクトリ名はPythonのパッケージ名で、それを通してその中のものをインポートすることができます。(例: import mysite.settings)。
d. mysite/__init__.py: PythonにディレクトリがPythonパッケージであることを伝える空のファイルです。
e. mysite/settings.py: この Django プロジェクトのための設定/構成。
f. mysite/urls.py: この Django プロジェクトの URL 宣言; Django で動く Web サイトの "directory" です。
g. mysite/wsgi.py: プロジェクトを実行するための WSGI 互換のウェブサーバのエントリです。
<スパン
ポート番号の変更
デフォルトでは、 :djadmin:runserver コマンドは、ローカル IP のポート 8000 のみをリッスンする開発サーバーを起動します。
サーバーのポートを変更したい場合は、コマンドラインの引数としてポートを渡すだけです。たとえば、次のコマンドは、ポート8080をリッスンするサーバーを起動します。
C:\Users\D-117>cd F:\workspace\mysite\src\mysite\ #manage.py file is located in the directory, that is, under the mysite project
C:\Users\D-117>f:
F:\workspace\mysite\src\mysite>python manage.py runserver 8080
Validating models...
0 errors found
March 12, 2014 - 10:31:27
Django version 1.6.2, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CTRL-BREAK.
サーバーのIPを変更したい場合は、ポート番号と一緒に渡せばよい。つまり、すべてのパブリック IP アドレスを listen するには (他のコンピュータで自分の作品を見せびらかしたい場合)、次のようにします。
python manage.py ランサーバー 0.0.0.0:8000
<スパン
データベースの設定
ここで、mysite/settings.py を編集します。これは通常の Python モジュールで、 Django の設定を表すモジュールレベルの変数を含んでいます。DATABASES の 'default' の下にある以下のキーの値を、あなたのデータベース接続設定に合うように変更します。
a.
<スパン
ENGINE
- django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', 'django.db.backends.sqlite3', 'django.db.backends .oracle' から一つ選択すること。
b.
名称
- データベースの名前です。SQLiteを使用している場合、データベースはコンピュータ上のファイルになります。この場合、:setting:NAMEは完全な絶対パスとなり、ファイル名も含まれます。もしファイルが
が存在する場合、データベースの初回同期時に自動的に作成されます(下記参照)。パスを指定するときは、Windows でも常にスラッシュを使用します (例 `C:/homes/user/mysite/sqlite3.db`)。
c.
ユーザー
- データベースのユーザー名(SQLiteでは不要)。
d.
パスワ-ド
- データベースのパスワード(SQLiteでは不要)。
e.
ホスト
- データベースホストのアドレス。データベースサーバーと同じ物理マシンである場合は、空白にしておきます (または 127.0.0.1 に設定します) (SQLite では必要ありません)。
新しいデータベースを作成する場合、SQLite のみを使用し、ENGINE を 'django.db.backends.sqlite3' に変更し、NAME をデータベースの保存場所に設定することをお勧めします。SQLite は Python に組み込まれているので、データベースをサポートするために何もインストー ルする必要はありません。
注意
PostgreSQLまたはMySQLを使用している場合、データベースが作成されていることを確認してください。これは、データベースのインタラクション・インターフェースの "CREATE DATABASE database_name;" コマンドで実行されます。
SQLiteを使用している場合は、事前に何も作成する必要はありません。データベースファイルは、必要なときに自動的に作成されます。
settings.pyを編集する際に、TIME_ZONEを自分のいるタイムゾーンに変更します。デフォルトはUS Central Time Zone (シカゴ)です。また、ファイルの一番下にあるINSTALLED_APPSの設定に注意してください。これは、現在の Django インスタンスがアクティブになっている全てのタイムゾーンを保持しています。
すべてのDjangoアプリケーション。各アプリは複数のプロジェクトで使用することができ、パッケージ化して他の人に配布し、そのプロジェクトで使用することができます。
デフォルトでは、 :setting:INSTALLED_APPS には Django が提供する以下のアプリケーションが入っています。
django.contrib.auth - Authentication system.
django.contrib.contenttypes - Content type framework.
django.contrib.sessions - session framework.
django.contrib.sites - website management framework.
django.contrib.messages - messaging framework.
django.contrib.staticfiles - Static file management framework.
これらのアプリケーションは、一般的な場合、デフォルトで含まれています。
これらすべてのアプリケーションは、少なくとも1つのデータベース・テーブルを使用するので、それらを使用する前に、データベースにテーブルを作成する必要があります。これを行うには、次のコマンドを実行します:python manage.py syncdb、詳細は後述します。
この時点で、プロジェクトの開発環境は整い、作業に取りかかることができます。
II. モデルの作成
4. コードの編集
4.1 blog.models.pyを修正する
from django.db import models
from django.contrib import admin
# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length = 150)
content = models.
DateTimeField()
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title', 'content', 'timestamp')
admin.site.register(BlogPost, BlogPostAdmin)
タイトル、コンテンツ、タイムスタンプの3つのフィールドを持つBlogPostモデルを作成することにします。各モデルは django.db.models.Model サブクラスを継承したクラスで記述されます。各モデル
にはいくつかのクラス変数があり、それぞれがデータベースフィールドを表します。
各フィールドはFieldのインスタンスで表されます。例えば、文字型フィールドはCharField、日付型フィールドはDateTimeFieldとなります。これは Django に、それぞれの
フィールドはどのようなタイプのデータを保持しているのでしょうか。
各Fieldインスタンスの名前はフィールドの名前(タイトル、コンテンツ、タイムスタンプなど)であり、そのフォーマットはアフィニティ・マシンのようなものです。Pythonのコードでは、次のように使用します。
の値を使用し、データベースはこの値をテーブルのカラム名として使用します。
4.2 blog.views.pyを修正する
# Create your views here. from django.template import loader,Context from django.http import HttpResponse from blog.models import BlogPost def archive(request): posts = BlogPost.objects.all() t = loader.get_template('archive.html') c = Context({ 'posts': posts}) return HttpResponse(t.render(c))
<未定義INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', )
4.3 mysite.setting.pyを修正し、次のセクションを見つけます。
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
from blog.views import archive
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^blog/', archive),
)
4.4 mysite.urls.pyを変更する
{% extends "base.html" %}
{% block content %}
{% for post in posts %}
<h1>{
{ post.title}}</h1>
<p>{
{ post.content }}</p>
<p>{
{ post.timestamp|date:"1, F jS"}}</p>
{% endfor %}
{% endblock %}
5. スタイルページ・テンプレートの作成
ブログパッケージの下に templates フォルダを追加し、templates の下に archive.html と base.html という 2 つのウェブページファイルを作成してください。
5.1 archive.htmlの編集
<html> <style type="text/css"> body { color: #edf; background: #453; padding: 0 5em; margin:0 } h1 { padding: 2em lem; background:#675 } h2 { color: #bf8; border-top: 1px dotted #fff; margin-top: 2em } p { margin: lem 0 } </style> <body> <h1><center>Alexia's Blog</center></h1> {% block content %} {% endblock %} </body> </html>
<未定義Creating tables ... Creating table django_admin_log Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use 'd-117'): root Email address: [email protected] Password: root Password (again): root Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s) Finished "F:\workspace\mysite\src\mysite\manage.py syncdb" execution.
<未定義{ post.content }}</p> <p>{
<未定義{ post.timestamp|date:"1, F jS"}}</p> {% endfor %} {% endblock %}
5.2 base.htmlの編集
<html>
<style type="text/css">
body { color: #edf; background: #453; padding: 0 5em; margin:0 }
h1 { padding: 2em lem; background:#675 }
h2 { color: #bf8; border-top: 1px dotted #fff; margin-top: 2em }
p { margin: lem 0 }
</style>
<body>
<h1><center>Alexia's Blog</center></h1>
{% block content %}
{% endblock %}
</body>
</html>
III データベースを同期させる
ブログの管理者バックエンドにログインするための準備として、アカウントとパスワードを設定します。
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'd-117'): root
Email address: [email protected]
Password: root
Password (again): root
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
Finished "F:\workspace\mysite\src\mysite\manage.py syncdb" execution.
IV. テストの実行
ログイン画面、ログインアカウント、パスワードは、データベースを初期化する際に設定します。
ログインに成功すると、以下のページにリダイレクトされます。
このページでは、ブログの記事を追加することができます。
正常に公開されたら、URL: http://127.0.0.1:8000/blog/进行查看 を入力して、テストに成功!
関連
-
[解決済み】Python: AttributeError: '_io.TextIOWrapper' オブジェクトに 'split' 属性がない。
-
Python スクリプトフレームワーク webpy テンプレート制御構造
-
[解決済み] インテル® MKL FATAL ERROR。mkl_intel_thread.dllをロードできません。
-
[解決済み] pythonスクリプトでpymongoの認証に失敗した
-
[解決済み] 'numpy.ndarray' オブジェクトに 'count' 属性がありません。
-
[解決済み] dict_keys' オブジェクトを取得すると、リストへのキャストにもかかわらずインデックスがサポートされない
-
[解決済み] Pythonプロジェクトに.gitignoreファイルを追加するためのベストプラクティス?[クローズド]。
-
[解決済み] heapqライブラリの関数の時間複雑性は?
-
PIPはランチャーでFatal errorが発生します。
-
AttributeError module pandas has no attribute dataframe
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PEP8のE128:ビジュアルインデントで継続行がアンダーインデントになるのは何?
-
[解決済み】TypeError: 期待されるキャラクタバッファオブジェクト
-
[解決済み] NumpyでReLU関数を実装する方法
-
[解決済み] matplotlib を使って画像をグレースケールで表示する
-
[解決済み] AttributeError: 'tuple' オブジェクトは属性を持ちません。
-
[解決済み] Virtualenv OSError - setuptools pip wheel failed with error code 1
-
[解決済み] super() は、新しいスタイルのクラスに対して "TypeError: must be type, not classobj" を送出する。
-
[解決済み] Python のための同等な matlab damp 関数
-
[解決済み] Python - Pyg Latin?
-
TypeError: 'float' オブジェクトは整数として解釈できません。