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"라는 내용의 단락이 있습니다.

+ Recent posts