CURRENT_USER
검사 권한에 따라 데이터베이스의 현재 "유효" 사용자 이름을 반환합니다. 일반적으로 이 사용자 이름은 세션 사용자와 동일하지만 경우에 따라 수퍼유저에 의해 변경될 수 있습니다.
참고
CURRENT_USER를 호출할 때는 후행 괄호를 사용하지 마십시오.
반환 유형
CURRENT_USER는 CHAR 또는 VARCHAR 문자열을 반환합니다.
예
다음은 현재 데이터베이스 사용자의 이름을 반환하는 쿼리입니다.
select current_user;
current_user
--------------
dwuser (1 row)
HTTP 요청 전후에 호출되는 데코레이터
# -*- encoding:utf8 -*-
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
print("/")
return "/"
@app.before_first_request
def before_first_request():
print("앱이 기동되고 나서 첫 번째 HTTP 요청에만 응답")
@app.before_request
def before_request():
print("매 HTTP 요청이 처리되기 전에 실행")
@app.after_request
def after_request(response):
print("매 HTTP 요청이 처리되고 나서 실행")
return response
@app.teardown_request
def teardown_request(exception):
print("매 HTTP요청의 결과가 브라우저에 응답하고 나서 호출")
@app.teardown_appcontext
def teardown_appcontext(exception):
print("HTTP요청의 어플리케이션 컨텍스트가 종료될때 실행")
is_authenticated 소개 및 예시
is_authenticated는 위에서 살펴 본 is_anonymous와 반대된다고 생각하시면 됩니다. 저 코드와 반대로 로그인 여부를 묻는 것입니다. 만약 로그인 되어 있다면 이 코드는 True를 반환합니다. 그렇다면 이 코드가 views.py에서 어떻게 사용되는지 알아볼까요?
1 2 3 4 5 6 |
if request.user.is_authenticated: pass # do something if user is logged in else: pass # do something if user is logged_out |
이렇게 위와는 반대로 사용되게 됩니다. 그렇다면 템플릿 태그는 어떨지 알아보겠습니다.
1 2 3 |
{% if user.is_authenticated %} <p>이 유저는 로그인 되어 있습니다.</p> {% endif %} |
이렇게 사용되게 됩니다. 템플릿 태그를 이용하면 둘 중 하나만 알아도 대부분의 코드를 구현할 수 있을 것입니다.
1 2 3 4 5 |
{% if user.is_authenticated %} <p>이 유저는 로그인 되어 있습니다.</p> {% else %} <p>이 유저는 로그아웃 되어 있습니다..</p> {% endif %} |
이렇게 사용하면 위에서 {% if user.is_authenticated %}가 False를 반환하게 될 경우 {% else %}안의 코드가 실행됩니다. 그러므로 한 가지만 알면 두 가지 경우를 다 처리할 수 있습니다.
render_template 사용법
예#
플라스크를 사용하면 동적 웹 페이지 컨텐츠에 대한 템플리트를 사용할 수 있습니다.
템플릿을 사용하는 프로젝트 구조의 예는 다음과 같습니다.
myproject/
/app/
/templates/
/index.html
/views.py
views.py :
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
pagetitle = "HomePage"
return render_template("index.html",
mytitle=pagetitle,
mycontent="Hello World")
render_templates 함수에 키 / 값 쌍을 추가하여 경로 처리기의 동적 내용을 템플릿에 전달할 수 있습니다. 위의 예에서 "pagetitle"및 "mycontent"변수는 렌더링 된 페이지에 포함되도록 템플리트에 전달됩니다. 템플릿에 다음 변수를 두 개의 중괄호로 {{mytitle}} . {{mytitle}}
index.html :
<html>
<head>
<title>{{ mytitle }}</title>
</head>
<body>
<p>{{ mycontent }}</p>
</body>
</html>
첫 번째 예와 같이 실행하면 http://localhost:5000/ "HomePage"라는 제목과 "Hello World"라는 내용의 단락이 있습니다.
':: IT > flask' 카테고리의 다른 글
스펙 : nginx, uwsgi, 프레임워크 및 라이브러리 : sqlarchemy/ 동적컨텐츠VS정적 컨텐츠 (0) | 2020.08.11 |
---|---|
[flask] Flask-Login (0) | 2020.08.05 |
[flask] jinja2 {% include %} 활용 (0) | 2020.07.23 |
[flask] 내부 링크 만들기 -url_for() (0) | 2020.07.22 |