본문 바로가기

카테고리 없음

Python flask parameter 넘기고 받기

728x90

개요

Flask로 페이지를 만들 때 parameter를 1개 또는 여러개를 넘겨서 호출할 일이 있어서 이 포스트를 정리 해봅니다.

 

 

1개 넘기기

<a href="{{url_for('home', namespace="ns-abc-def")}}">{{"ns-abc-def"}}</a>

위 url_for()함수를 쓰게 되면 아래와 같은 get요청을 만들어 줍니다.

http://localhost:8082/home?namespace=20210517

 

2개 넘기기

<a href="{{url_for('home', name='hello', namespace='world')}}">{{"click"}}</a>

1개 넘기는 것이랑 2개 이상 넘길 때 쓰는 방식은 ,로 구분해서 넘겨주면 됩니다.

 

1개 받기

@app.route('/home')
def home():
    ns = request.args.get('namespace', default = 'ns-abc-aaa', type = str)
    print(ns)
    return render_template('home.html', ns=ns)

앞에서 1개를 넘겼을 때 받는 방법입니다.

 

2개 받기

@app.route('/home')
def home():
    ns = request.args.get('namespace', default = 'ns-abc-aaa', type = str)
    name = request.args.get('name', default = 'bbb', type = str)
    print(ns, name)
    return render_template('home.html', ns=ns, name=name)

 

Form을 이용해 Get으로 넘기고 받기

<form action="{{url_for('auction_list')}}" method="get">
    <div class="col-md-6">
        <input type="text" class="form-control" name="date" id="date" placeholder="기한을 선택해주세요."/>
    </div>
    <div class="col-md-1">
        <input type="submit" class="btn btn-primary"/>
    </div>
</form>

앞에서는 url_for()를 이용해서 넘겼지만 Form을 써서 넘기고 싶을때는 이 방법을 씁니다.

 

auction_list에 get으로 가는 요청을 만듭니다. get요청을 하면 argument에 내가 보낸 내용이 보입니다.

 

http://localhost:8082/auction_list?date=20210517

 

submit버튼을 누르면 url에 위와 같이 나오면서 요청이 전송됩니다.

 

받기

@app.route('/auction_list', methods=['GET', 'POST'])
def auction_list():
    date = '20210514'
    if request.args.get('date') != None and request.args.get('date') != '':
        date = request.args.get('date')

request.args.get('date')를 이용해 get요청의 파라메터로 받은 값을 읽을 수 있습니다.

 

 

http://localhost:5000/home_filter/<KEYWORD>?namespace=ns-abc-def 형식으로 넘기기

<a href="{{url_for('home_filter', keyword=info.KEYWORD, namespace=info.NAMESPACE)}}">{{info.NAME}}</a>

/home_filter/<KEYWORD> 형태로 KEYWORD를 넘기고 parameter로 namespace를 넘기고 싶을 때 위와 같이 요청 합니다.

 

받을때는 아래와 같이 받습니다.

@app.route('/home_filter/<keyword>')
def home_filter(keyword):
    ns = request.args.get('namespace', default = 'ns-abc-def', type = str)

keyword파라메터로 /home_filter/<KEYWORD> 이렇게 넘긴게 들어가고 ns로는 namespace 파라메터로 넘긴 값이 들어옵니다.

 

 

flash()

<div class="col-md-8">
            {% with messages = get_flashed_messages(with_categories=true) %}
              {% if messages %}
                {% for category, message in messages %}
                  <div class="alert alert-{{ category }}">
                    {{ message }}
                  </div>
                {% endfor %}
              {% endif %}
              {% endwith %}
</div>

flash('msg', 'success')로 message를 ui에 표시하고 싶을때 코드

 

<div class="col-md-8">
{% with messages = get_flashed_messages(with_categories=true) %}
	{% if messages %}
		{% for category, message in messages %}
			<div class="alert alert-{{ category }}">
				{{ message }}
			</div>
		{% endfor %}
	{% endif %}
{% endwith %}
</div>

 

 

Parameter2개 args2개 넘기기

@ns.route("/statistics/<string:category_1_id>/<string:category_2_id>/", methods=["GET", "POST"])
class statistics_list2(Resource):
    def get(self, category_1_id, category_2_id):
        print(category_1_id, category_2_id)
        print(request.args)
        from_date = request.args.get('from')
        to_date = request.args.get('to')

        return f'category1:{category_1_id} category2:{category_2_id} from_date:{from_date} to_date:{to_date}', 201

 

728x90
블로그 주인장입니다. 원하시는 정보는 얻으셨나요? 이 포스트에서 추가로 필요한 정보가 있으시면 여기에 남겨주세요.