Djangoの原則であるURLSルーティングは、クライアントアクセスリクエストを受信します------>ビューを表示する関数がリクエストを処理します-------->モデルモデル(データベース)がデータを処理します------ --->データを処理するビュー表示機能--------->データを表示するテンプレートテンプレート(HTML)、クライアントへのフィードバック
1.データベースを初期化し、管理バックグラウンドでユーザーを生成します。ログイン管理の背景
python manage.py migrate#データベースを初期化する
python manage.py createsuperuser#スーパーユーザーを作成
次に、モデル、モデル、つまり、投票システムなどのデータベースに関連付けられたクラス関数を作成します。次に、投票アイテム、投票アイテム作成時間、投票コンテンツオプション、投票コンテンツオプション作成時間、および投票数があります。データベースのガイドラインに従って、投票アイテムと投票コンテンツオプションを2つのテーブルに分けます。
models.pyを開きます
django.dbインポートモデルから
#ここでモデルを作成します。
クラスの質問(models.Model):
#親クラスから継承されたクラスを作成しますquestion_text = models.CharField(max_length = 200)#インスタンスを作成します。タイプは文字で、最大長は200です
publish_date = models.DateTimeField( 'publish date') #time 型のインスタンスを作成し、xxxx
def __str __(self)として宣言します:strメソッドを使用して質問の内容を
返しますreturn self.question_text
class Choice(models.Model):
#親クラスから継承されたクラスを作成choice_text = models.CharField(max_length = 100)#インスタンスを作成し、タイプは文字、最大長は100
publish_date = models.DateTimeField( 'publish date')#インスタンスの作成、タイプは時間、xxxxとして宣言され
ますvote = models.IntegerField(デフォルト= 0)#インスタンスの作成、タイプは数値、デフォルトは0
質問= models.ForeignKey(質問、on_delete = models.CASCADE)#インスタンスの作成、タイプ(Question)外部キーの場合、関連する
def __str __(self)を削除します:strメソッドを使用して、質問オプションのコンテンツを
返します。return self.choice_text
3.アプリケーションをプロジェクトに追加し、モデルをバックグラウンド管理に登録します。そして、管理の背景を最適化します。
1. settings.pyを開きます
2. admin.pyを開きます
from
django.contrib import admin from .models import Question、Choice #Import module
class QuestionAdmin(admin.ModelAdmin):#New model、Integrated in the parent class
list_display =( 'question_text'、 'publish_date')#background manager to display
list_filter =( 'publish_date'、)#フィルターとして時間を使用
search_fields =( 'question_text'、)
#コンテンツを検索者の順序として使用=( '-publish_date'、 'question_text')#降順で並べ替え、質問並べ替えを使用
date_hierarchy = 'publish_date'#タイムラインとして時間を使用
class ChoiceAdmin(admin.ModelAdmin):
list_display =( 'question'、 'choice_text'、 'vote'、 'publish_date')
list_filter =( 'publish_date'、)
search_fields =( 'choice_text'、)
ordering =( '-publish_date' 、 '投票')
date_hierarchy = 'publish_date'
raw_id_fields =( 'question'、)#优化选项、效果是显示question详情
admin.site.register(Question、QuestionAdmin)
#管理バックグラウンドに登録admin.site.register(Choice、ChoiceAdmin)
3.効果は図に示されています
4.モデルはデータベースに関連していると私たちは皆言った。今モデルがあります。次に、モデルを配置する必要があります。データベースに適用し、データベースにモデル内のフィールドを生成させます。
python manage.py makemigrations#データベースステートメントを生成する
python manage.py migrate #executeステートメント
3. Webページで質問と関連オプションを作成します。
問題を生成する
対応する質問を生成するためのオプション
4番目に、データベースを確認します。これら2つのテーブルを取得し、polls_questionとpolls_choiceを取得できます。そして、Djangoは自動的にそれらのid主キーを追加しました。また、選択テーブルには外部キー制約があります。
5.ホームページを作成し、Djangoのしくみを説明する
Djangoの動作原理によると、変更する必要がある最初のステップはアプリケーションのurlsファイルです
1. urls.pyを開きます
django.conf.urlsからからURL
をインポートします。ビューをインポートする
urlpatterns = [
url(r '^ $'、views.index、name = 'index')、
]
インデックスへのルートはすでにここに書かれています。出会い系ビューのインデックス機能。
2. views.pyを開きます
django.shortcutsからのインポートレンダー、.modelsからのHttpResponse
インポート質問、選択#导入模块
#ここでビューを作成します
。Defindex(request):#Create index function
question = Question.objects.all()#Defining instance question、a object query collection with a value of Question
return render(request、 'polls / index.html'、 {'question':question})#投票の下でデータをindex.htmlに送信します。パラメーター名は質問、値は質問です
3.テンプレートディレクトリを作成し、テンプレートファイルを作成します
mkdir -p polls / templates / polls
4. index.htmlファイルを書き込みます。
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title> polls主页</ title>
</ head>
<body>
<ul>
{%for q in質問%}
<li>
<a href="This处フィラー写的是超链接跳转的页面,暂時間留空">
{{q.question_text}}
</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp;&nbsp; {{q.publish_date}}
</ li>
{%endfor%}
</ ul>
</ body>
</ html>
効果は次のとおりです
6.各質問の詳細ページを作成し、ホームページにアクセスしてジャンプします。
1. urlsファイルを変更するのは慣習です。
urls.pyを開きます
django.conf.urlsからからURL
をインポートします。ビューをインポートする
urlpatterns = [
url(r '^ $'、views.index、name = 'index')、
url(r '(?P <question_id> \ d +)/ $'、views.detail、name = 'detail')# ## URLを計画し、数値を使用して変数を作成します。次に、質問に従ってpolls_questionのIDを照合し、question_textへの正確な配置を実現します。
]
2. views.pyファイルを変更します。データを取得してテンプレートファイルに送信する詳細ビュー機能が追加されました。
def detail(request、question_id):#question_idはurlから取得した
質問です= Question.objects.get(id = question_id)#get メソッドを通じて、対応する質問インスタンスを取得します
return render(request、 'polls / detail.html '、{'質問 ':質問})
3. detail.htmlファイルを作成し、実際のニーズに応じて対応するビューインターフェイスを記述します
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>投票詳細ページ</ title>
</ head>
<body>
<p> {{question} } </ p>
<form action = "ここでは空白のままにしてください。役割は投票するデータを送信することです">
{%for c in
c.question.choice_set.all %} <input type = "radio" name = "c_id" value = "{{c.id}}"> {{c.choice_text}} ##名前と値、後で説明します
{%endfor%}
<input type = "submit" value = "Submit">
</ form>
< / body>
</ html>
4.ハイパーリンクのdetail.tmlのテンプレートに一致するように、ホームページのindex.htmlを変更します
index.htmlを開きます
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title> polls主页</ title>
</ head>
<body>
<ul>
{%for q in質問%}
<li>
<a href="{% url'detail' question_id=q.id %}">#调用url模块、匹配詳細视図関数、作為パラメータ的質問。值是q.id
{{q。 question_text}}
</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{q.publish_date}}
</ li>
{%endfor%}
</ ul>
</ body>
</ html >
この時点で、私たちは達成しています。ハイパーリンクジャンプの問題。
7、投票結果を生成する作業
1. urls.pyファイルの新しいレコード
django.conf.urlsからからURL
をインポートします。ビューをインポートする
urlpatterns = [
url(r '^ $'、views.index、name = 'index')、
url(r '(?P <question_id> \ d +)/ $'、views.detail、name = 'detail')、
url(r '(?P <question_id> \ d +)/ result / $'、views.result、name = 'result')、#新增
]
2. views.pyファイルに関数を追加
def result(request、question_id):
question = Question.objects.get(id = question_id)
return render(request、 'polls / result.html'、{'question':question})
3.テンプレートにresult.htmlファイルを追加して、実際のニーズに従ってデータを計画します
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>投票结果页</ title>
</ head>
<body>
<table border = "1px" >
<tr>
<td colspan = "2"> {{質問}} </ td>
</ tr>
{%for c in inc.choice_set.all %}
<tr>
<td>
{{c.choice_text}}
</ td>
<td>
票数:{{c.vote}}
</ td>
</ tr>
{%endfor%}
</ table>
</ body>
</ html>
効果は次のとおりです
8、投票プログラムを作成します。アイデアは次のようになります。ホームページで、question_idを使用することと同等の質問を選択し、対応する詳細ページを開いてから、詳細ページで、オプションのIDをフォームから選択します。投票プログラムに投稿します。投票プログラム+投票するデータに1を付けます。次に、投票が終わったら、結果ページをクライアントにフィードバックします。最初に詳細ホームページのコードを作成してから、投票手順を完成させましょう。
1、
1. urls.pyファイルの新しいコード
django.conf.urlsからからURL
をインポートします。ビューをインポートする
urlpatterns = [
url(r '^ $'、views.index、name = 'index')、
url(r '(?P <question_id> \ d +)/ $'、views.detail、name = 'detail')、
url(r '(?P <question_id> \ d +)/ result / $'、views.result、name = 'result')、
url(r '(?P <question_id> \ d +)/ vote / $'、views .vote、name = 'vote')、
]
2. views.pyファイルレコードを追加しました。
def vote(request、question_id):
#投票プログラムを作成します。パラメーターquestion_idは、choice_id = request.POST.get( 'c_id')を詳細から取得します#requestメソッドを使用してパラメーターc_id
c = Choice.objects.get(id を取得します= choice_id)#選択肢のインスタンスを
取得c.vote + = 1
#投票数+1 c.save()
return redirect( 'result'、question_id = question_id)#結果ページにリダイレクトします。
3. detail.pyファイルを変更します
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>投票详情页</ title>
</ head>
<body>
<p> {{質問} } </ p>
<form action = "{%url 'vote' question_id = question.id%}" method = "post">#方式はpost、然後提交データ到来票、パラメータ数XXXXX
{問題のcの% .choice_set.all%}
<input type = "radio" name = "c_id" value = "{{c.id}}"> {{c.choice_text}}
{%endfor%}
<input type = "submit"値= "提交">
</ form>
</ body>
</ html>
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------
基本的に完成
効果は以下の通りです
CSSスタイル、ブートストラップスタイル、ホームページへの戻りなどを追加できます。