[Web開発2]一連の投票WebサイトをDjangoフレームワークにデプロイする

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スタイル、ブートストラップスタイル、ホームページへの戻りなどを追加できます。

73件の元の記事を公開 賞賛4 20,000回以上の閲覧

おすすめ

転載: blog.csdn.net/qq_27592485/article/details/102958808