2014-10-28 2 views
0

예 : 앱의 모든 사용자는 몇 가지 포인트가 있으며 데이터베이스에 저장됩니다 (물론)템플릿에서 변수를 Flask로 전달하는 방법은 무엇입니까?

사용자가 페이지/프로필을 방문하면 템플릿에 {{ points }}이 표시됩니다.

하지만 버튼을 클릭하면 일부 사용자 지점 (예 : 10)을 줄이려고합니다.

Template.html :

Your points: {{ current_user.points }} <a href="{{ url_for('index') }}" button type="submit" class="btn btn-success" name="reduce">Reduce it!</button></a> 

하지만 어떻게 통과 신호를 볼 수 있습니다 "감소"를 얻을 수 있습니다 나는이 같이해야한다고 생각?

답변

0

필요한 모든 정보가 있습니다. 어떤 사용자가 current_user 프록시에서 링크를 클릭했는지 알 수 있습니다 (그 이유 때문에 플라스크 로그인 또는 플라스크 보안을 사용하고 있다고 가정합니다). 따라서 제출 대상인 경로는 데이터베이스에서 사용자 지점을 가져 와서 조정하고 커밋해야합니다. 당신이 플라스크-SQLAlchemy의 같은 것을 사용하는 경우

은 그냥 수 : {{ url_for('reduce_points') }}에 대한 링크를 렌더링 템플릿으로

@login_required 
@app.route('/reduce/') 
def reduce_points(): 
    current_user.points -= 10 
    db.session.commit() 
    return 'Points Reduced!' 

.

당신 대신 당신이 당신이 원하는 작업을 포함하는 각 버튼의 형태를 가질 수 actions-- 몇 가지를 처리하는 하나 개의보기를 원했다 말할 수 있습니다 :

<form method='post' target="{{ url_for('actions') }}"> 
<input type="hidden" name="action" value="reduce"/> 
<input type="submit" value="Reduce!"/> 
</form> 

그런 다음 앱의 경로 코드는 수 action이라는 폼 엘리먼트를 찾은 다음 로직을 사용하여 무엇을 할 것인지를 결정한다. 또한 양식을 다루는 경우 Flask-WTF가 무료로 제공하는 CSRF 보호에 대한 내용을 읽고 사용자가 우발적으로 버튼을 몇 번 클릭하여 저장하고 계정을 무효화합니다.

+0

감사합니다. 이제 작동합니다. – bartezr

관련 문제