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

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

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

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Flask

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python

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

HTML

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

Q&A

解決済

1回答

4489閲覧

Flaskを使って、htmlでpostされたチェックボックスの値を入手したい

muchi_muchi

総合スコア2

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Flask

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Python

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

HTML

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

0グッド

0クリップ

投稿2021/10/26 06:44

前提・実現したいこと

htmlでチェックボックスを作成し、チェックされた値をpostし、cgiを用いて.pyに値を渡したいです。
チェックボックスが入力されている値(value)を取得したいのですが、エラーが出てしまいます。
PythonでFlaskを利用するのは初めてなため、質問がうまくできているかわかりませんが、ご教示いただければ幸いです。

発生している問題・エラーメッセージ

RuntimeError: Working outside of request context. This typically means that you attempted to use functionality that needed an active HTTP request. Consult the documentation on testing for information about how to avoid this problem.

該当のソースコード

html

1<!DOCTYPE html> 2<html><head> 3<meta charaset = "utf-8"> 4<link rel="stylesheet" href="choice_screen.css"/> 5</head> 6<body> 7<form action="/cgi-bin/choice_screen.py" method="post"> 8 <div id="main"> 9 <ul class="image_list"> 10 <li> 11 <div class="image_box"> 12 <img class="thumbnail" src="example_1.jpg" alt="foo"/> 13 <input class="disabled_checkbox" name="choice" type="checkbox" value="0" checked / > 14 </div> 15 </li> 16 <li> 17 <div class="image_box"> 18 <img class="thumbnail" src="example_2.jpg" alt="foo"/> 19 <input class="disabled_checkbox" name="choice" type="checkbox" value="1" checked /> 20 </div> 21 </li> 22 </ul> 23</div> 24<input type="submit" value="選択完了"> 25</form> 26<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> 27<script src="base.js"></script> 28</body> 29</html> 30

Python3

1#!/usr/bin/python3 2# -*- coding: utf-8 -*- 3import cgi 4import cgitb 5from flask import Flask, request 6app = Flask(__name__) 7 8cgitb.enable() 9 10print("Content-Type: text/html; charset=UTF-8\n") 11 12@app.route("/hi", methods=['POST']) 13def hi(): 14 name = request.form.getlist('fav') 15 print(name) 16 17form = cgi.FieldStorage() 18 19print(hi())

やってみたこと

ファイルの構造は、以下のようになっています。

text

1index.html 2| 3cgi-bin 4|_ choice_screen.py

はじめ、単純にform = cgi.FieldStorage()をprintしてみたところ、noneで返されたので、チェックボックスの値を取得する方法を模索しており、flaskに辿り着きました。ど素人ですが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「flask checkbox」でググるといろいろ出てくるようです。
1番目に出てきたこちらがやりたいことに近いのではないかと思います。

[Python] Flaskで複数のチェックボックスの値を受け取る - YoheiM .NET

投稿2021/10/26 08:24

Lhankor_Mhy

総合スコア36115

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

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

muchi_muchi

2021/10/26 08:30

私もこのサイトを見つけ、を参考にしてやってみたのですが、うまくできませんでした... わざわざ調べていただきありがとうございます。
Lhankor_Mhy

2021/10/26 08:41

ご提示のコードはちょっと間違いが多いので、とりあえずは変更せずに、その記事のコードをそのままテストみればいいかと思いますね。
muchi_muchi

2021/10/26 13:25

わかりました。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問