質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2709閲覧

Djangoでログインフォームを作成しているが、画面遷移のロジックが分からない

Murasaki_PurPle

総合スコア37

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/08/29 06:44

ログイン画面を作成しているが、遷移のロジックが分からない

お世話になっております。叢咲(むらさき)と申します。
今Djangoでログイン画面を作成しています。POSTで入力を送るのですが、どのように遷移するのかが分からず困っています。

構成図とスクリプト

tesT # ├─ diary # │ ├─ __pycache__ # │ │ ├─ __init__.cpython-36.pyc # │ │ ├─ admin.cpython-36.pyc # │ │ ├─ apps.cpython-36.pyc # │ │ ├─ models.cpython-36.pyc # │ │ ├─ urls.cpython-36.pyc # │ │ └─ views.cpython-36.pyc # │ │ │ ├─ migrations # │ │ ├─ __pycache__ # │ │ │ └─ __init__.cpython-36.pyc # │ │ │ │ │ └─ __init__.py # │ │ │ ├─ templates # │ │ ├─ base.html # │ │ ├─ check.html # │ │ ├─ login.html # │ │ └─ signup.html # │ │ │ ├─ __init__.py # │ ├─ admin.py # │ ├─ apps.py # │ ├─ models.py # │ ├─ tests.py # │ ├─ urls.py # │ └─ views.py # │ ├─ tesT # │ ├─ __pycache__ # │ │ ├─ __init__.cpython-36.pyc # │ │ ├─ settings.cpython-36.pyc # │ │ ├─ urls.cpython-36.pyc # │ │ └─ wsgi.cpython-36.pyc # │ │ │ ├─ __init__.py # │ ├─ settings.py # │ ├─ urls.py # │ └─ wsgi.py # │ ├─ db.sqlite3 # └─ manage.py #

diary/urls.py

python

1from django.urls import path, include 2from .views import signupview, loginview, sampleview 3 4urlpatterns = [ 5 path('signup/', signupview, name="signip"), 6 path('login/', loginview, name="login"), 7 path("sample/", sampleview) 8]

python

1from django.shortcuts import render, redirect 2from django.contrib.auth import authenticate, login 3# Create your views here. 4 5def sampleview(request): 6 if request.method == "POST": 7 return redirect("login") 8 else: 9 return render(request, "login.html", {})

sample.py

html

1<!doctype html> 2<html lang="ja"> 3 <head> 4 <!-- Required meta tags --> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 7 8 <title>Sample</title> 9 </head> 10 <body> 11 <form class="form-signin" method="post">{% csrf_token %} 12 <h1>Please Log in</h1> 13 <label for="inputEmail" class="sr-only">User name</label> 14 <input type="text" id="inputEmail" class="form-control" placeholder="username" name="username_data" required autofocus> 15 <label for="inputPassword" class="sr-only">Password</label> 16 <input type="password" id="inputPassword" name="password_data" class="form-control" placeholder="Password" required> 17 18 <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> 19 </form> 20 </body> 21</html>

自分が考える画面遷移のイメージ

画面遷移
①ブラウザからリクエストが送られる
②urls.pyでviews.pyの中にあるsampleviewが指定される。
③HTTP REQUESTはPOSTではないので、sampleview中の

python

1else: 2 return render(request, "login.html", {})

が実行される。
④login.htmlでフォームに入力された値をPOSTで送る

POSTで送ったあとがどのようになるのかがわかりません。

補足情報(FW/ツールのバージョンなど)

お忙しい中恐縮ですが、ご教示いただけますようお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/31 21:11

1. ユーザーがブラウザーのアドレスバーにhttp://localhost:8000/diary/sample/を入力してEnter 2. ブラウザがlocalhost:8000に、httpでGET /diary/sample/を要求する 3. djangoが受け取り、/diary/なのでdiary/url.pyを呼び出す 4. url.pyはsample/にマッチするのでsample.pyのsampleviewを呼び出す 5. sampleviewはGETなので、login.htmlをレスポンスとして返す 6. ブラウザの画面にlogin.htmlの内容が表示される 7. ユーザーはemailとパスワードを入力して、Sign inボタンを押す 8. ブラウザはlocalhost:8000にhttpでPOST /diary/sample/を要求する (login.htmlのform要素にaction属性の指定がないため、hasamiさんのおっしゃるように元のURLにpostされます) 9. 前回同様djangoが受け取り、/diary/なのでdiary/url.pyを呼び出す 10. 前回同様url.pyはsample/にマッチするのでsample.pyのsampleviewを呼び出す 11. sampleviewはPOSTなので、"login"と名前付けされたurlへのリダイレクトを内部的に要求します 12. djangoは内部的に要求を受け取り、diary/url.pyを呼び出す 13. url.pyは"login"と名前付けされたパターンに記述されている、loginviewを呼び出す 。。。ココから先はソースがないので分かりません
guest

回答1

0

ベストアンサー

formaction属性が省略されているため、自分自身(sample/)にPOSTされます。

投稿2020/08/31 06:12

hasami

総合スコア1277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Murasaki_PurPle

2020/09/06 07:52

なるほど... 確かにそうですね。 Djangoの質問というよりは、単なるhtmlの理解度不足でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問