2017-05-13 1 views
0

현재 웹 응용 프로그램에서 Flask 및 Flask-User 확장을 사용하여 권한을 처리하고 있습니다. 이처럼 내 views.py 파일과 뭔가플라스크 - 전역 값을 올바르게 설정하는 방법

@application.route('/dummy') 
@roles_required('Admin') 
@login_required 
def dummy(): 

:

{% if current_user.is_authenticated and current_user.has_roles('Admin') %} 

내 템플릿 순간에 나는 이런 식으로 뭔가가있다.

이제 역할 이름의 관점에서 내 마음을 바꾼 다음 해당 프로젝트를 찾아서 바꾸기 위해 전체 프로젝트를 검색해야했습니다. 내 views.py 또는 다른 템플릿에서 액세스 할 수있는 ADMIN_ROLE 글로벌을 정의하려고합니다. 나는 역할의 이름을 바꾸고 싶을 때마다 설정 파일을 바꾼다.

나는 나의 config.py ADMIN_ROLE = "Admin"을 설정하고 @roles_required(current_app.config['ADMIN_ROLE'])를 작성하여 시도하지만 그건 나에게 다음과 같은 오류 제공 :
 
RuntimeError: Working outside of application context. 

This typically means that you attempted to use functionality that needed 
to interface with the current application object in a way. To solve 
this set up an application context with app.app_context(). See the 
documentation for more information. 

것은 그래서 잘못된해야합니다. 무엇을 시도하고있는 가장 올바른 방법은 무엇입니까?

답변

0

이렇게 말하면 앱 컨텍스트 내에서만 config에 액세스 할 수 있습니다. 일반적으로이 작업을 수행 : 당신이 장식에이 일을하고 있기 때문에

with current_app.app_context(): 
    admin_role = current_app.config['ADMIN_ROLE'] 

, 나는 그렇게 어쨌든 거기에 생각하지 않습니다. 별도의 모듈을 사용하는 것이 좋습니다. 자, doesn't appear, 진저에있는 파이썬 import 구문을 사용할 수 있으므로, 우리는 여전히 app.config을 사용할 것입니다. 기본적으로 원하는 역할을 가진 모듈을 만든 다음 config 파일과 routes 파일로 가져옵니다.

roles.py

ADMIN = "Admin" 
USER = "User" 

from roles import ADMIN, USER 

@application.route('/dummy') 
@roles_required(ADMIN) 
@login_required 
def dummy(): 

views.py

{% if current_user.is_authenticated and current_user.has_roles(app.config['ADMIN_ROLE']) %} 
+0

감사

from roles import ADMIN, USER ADMIN_ROLE = ADMIN USER_ROLE = USER 

routes.py config.py 너, 대단한 대답이야. jinja에서 여전히'app.config'를 사용해야하지만 이것은 가장 논리적 인 경로이며 깨끗한 솔루션처럼 보입니다. 내가 성취하려고하는 것이 모든 역할의 문자열 이름을 쓰는 것보다 낫다는 것에 동의하십니까? –

+0

예, 변경 될 수있는 코드가있는 경우 여러 개가 아닌 한 곳에서 변경하는 것이 좋습니다. –

+0

나는 작은 문제에 부딪쳤다. Jinja에서 javascript를 사용할 때'if ($ (this) .val()! == {{config [ 'ADMIN_ROLE']}})'는 if ($ (this))로 변환됩니다. ADMIN은 config.py에서 가져온 변수의 이름이고''Admin ''의 값이 아닙니다. –

관련 문제