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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Python

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

Q&A

解決済

1回答

460閲覧

sqlalchmeyを使ってdbにデータを追加した後、htmlにリダイレクトしたい

dabi

総合スコア6

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Python

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

0グッド

0クリップ

投稿2022/03/20 15:03

register.htmlのページからユーザネームとパスワードのPOSTリクエストを受け取るとdbにデータを追加して/loginにリダイレクトするというアプリを作ったのですが、dbにはデータが格納されているものの、ブラウザにはlogin.htmlが表示されることはなく、Internal Server Error と表示されてしまいます。
どのようにすれば解決できるでしょうか?
※まだ、loginするアプリは制作していないので、
login.htmlに関しては、register.htmlとほぼ同一のコードです。

register.html

1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>アプリ</title> 8 <link rel="stylesheet" href="static/style.css"> 9 <link href="https://fonts.googleapis.com/css?family=Londrina+Outline" rel="stylesheet"> 10 <link href="https://fonts.googleapis.com/earlyaccess/nicomoji.css" rel="stylesheet" /> 11 12</head> 13<body> 14 <div class="login_form"> 15 <form action="" method="post"> 16 <p class="text">ユーザーネーム</p> 17 <textarea name="name" id=""></textarea> 18 <p class="text">パスワード</p> 19 <textarea class="pass" name="password" type="password" id="" ></textarea> 20 </br> 21 <button type="submit" class="Send_button", id="">始める!!</button> 22 </form> 23 </div> 24</body> 25</html>

main.py

1import os 2from flask import Flask, render_template, request, redirect, url_for 3from flask_sqlalchemy import SQLAlchemy 4from werkzeug.security import generate_password_hash 5 6 7app = Flask(__name__) 8app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user.db' 9app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 10app.config['SECRET_KEY'] = os.urandom(24) 11db = SQLAlchemy(app) 12 13class User(db.Model): 14 id = db.Column(db.Integer, primary_key=True) 15 username = db.Column(db.String(50), nullable=False, unique=True) 16 password = db.Column(db.String(25)) 17 18 19@app.route('/login') 20def login(): 21 return render_template('login.html') 22 23@app.route('/register', methods=['POST', 'GET']) 24def register(): 25 if request.method == "POST": 26 username = request.form.get('name') 27 password = request.form.get('password') 28 # Userのインスタンスを作成 29 user = User(username=username, password=generate_password_hash(password, method='sha256')) 30 db.session.add(user) 31 db.session.commit() 32 redirect('/login') 33 else: 34 return render_template('register.html') 35 36 37if __name__ == '__main__': 38 app.run() 39

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

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

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

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

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

Supernove

2022/03/20 15:08

internal server errorということはアプリケーションを実行しているターミナル上でなにかしらエラーが出ているのでそれを載せてもらえばその原因を回答できると思います。(できれば自分が実装しているのでそこから自分で原因を特定できたらいいのですが…)
dabi

2022/03/21 14:42

ターミナルには、以下のようなエラーが表示されています raise TypeError( TypeError: The view function for 'register' did not return a valid response. The function either returned None or ended without a return statement. 127.0.0.1 - - [21/Mar/2022 23:41:32] "POST /register HTTP/1.1" 500 -
guest

回答1

0

ベストアンサー

register関数でPOSTメソッドが来たときに返り値が入っていないことでエラーになっていると思います。なので、POSTメソッドのときにif構文の最後を return redirect('/login')とすればエラーが解消されて正常にリダイレクトされるはずです

投稿2022/03/21 16:24

Supernove

総合スコア1154

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問