Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

개발일기

flask#1 본문

python/flask

flask#1

kimjw7815 2025. 3. 31. 00:28

장고는 기본 폴더 구조 생성 코드를 지원해줬는데 flask는 없더라.

그래서 GPT 시켜서 기본 폴더 구조 생성하는 코드를 받았다.

import os

folders = ["templates", "static"]
files = {
    "app.py": '''from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)
''',
    "templates/index.html": '''<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask 기본 사이트</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>환영합니다! Flask 기본 웹사이트입니다.</h1>
    <p>Flask를 사용하여 웹사이트를 만들어 보세요!</p>
</body>
</html>''',
    "static/style.css": '''body {
    font-family: Arial, sans-serif;
    text-align: center;
    margin: 50px;
    background-color: #f4f4f4;
}

h1 {
    color: #333;
}'''
}

# 폴더 생성
for folder in folders:
    os.makedirs(folder, exist_ok=True)

# 파일 생성
for file, content in files.items():
    with open(file, "w", encoding="utf-8") as f:
        f.write(content)

print("Flask 기본 프로젝트가 생성되었습니다!")

 

 

그러고 가장 기본적인 것만 구성해줬다

from flask import Flask, render_template, request, redirect, url_for, session
from functools import wraps
import time

app = Flask(__name__)
app.secret_key = 'supersecretkey'

# login_required라는 데코레이터를 정의
def login_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user_id' not in session:
            return redirect(url_for('login'))
        return f(*args, **kwargs)
    return decorated_function

# 메인 화면
@app.route('/', methods=['GET', 'POST'])
def home():
    if request.method == 'POST':
        session['request_data'] = {
            'name': request.form.get('name'),
            'chk_info': request.form.get('chk_info'),
            'language': request.form.get('language'),
            'sub_time': time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        }
        print(session['request_data'])
        session['message'] = '전송이 완료되었습니다!\n'+str(session['request_data'])

        return redirect(url_for('home'))
    message=session.pop('message', None)
    return render_template('index.html', session=session, message=message)

# session['request_data'] 정보 지우기
@app.route('/clear/request_data')
def clear_request_data():
    session.pop('request_data', None)  # 저장된 정보 초기화
    return redirect(url_for('home'))

# 지금까지 보낸 요청 확인하기
@app.route('/history', methods=['GET', 'POST'])
@login_required
def history():
    return "여기는 로그인한 사람만 접속 가능!"

# 회원가입
@app.route('/register', methods=['GET', 'POST'])
def register():
    return "회원가입!"

# 로그인
@app.route('/login', methods=['GET', 'POST'])
def login():
    return "로그인!"

# 로그아웃
@app.route('/logout', methods=['GET', 'POST'])
def logout():
    return redirect(url_for(home))

if __name__ == '__main__':
    app.run(debug=True)

그리고 html. 내가 보기에 html은 그냥 필요할 때마다 검색해서 쓰는 게 맞아

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask 기본 사이트</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>환영합니다! Flask 기본 웹사이트입니다.</h1>
    <p>Flask를 사용하여 웹사이트를 만들어 보세요!</p>
    
    <form method="POST">

        <label>radio button</label>
        <input type="radio" name="chk_info" value="프론트엔드">프론트엔드
        <input type="radio" name="chk_info" value="백엔드">백엔드
        <input type="radio" name="chk_info" value="웹디자인">웹디자인
        <input type="radio" name="chk_info" value="풀스택">풀스택
    
        <br>
        
        <label>input</label>
        <input type="text" name="name" placeholder="Enter name" required/>
        
        <br>
    
        <label>select</label>
        <select name="language" id="lang">
            <option value="python">python</option>
            <option value="c++">c++</option>
            <option value="c#">c#</option>
            <option value="go">go</option>
            <option value="css, js, html">css, js, html</option>
            <option value="dart">dart</option>
        </select>
    
        <br><br>
    
        <label>제출 button</label>
        <button type="submit">버튼</button>
    </form>

    {% if message %}
        <div style="border:1px solid green; padding:10px; background-color: #f0f8ff;">
            <p>{{ message }}</p>
        </div>
        <a href="{{ url_for('clear_request_data') }}">확인</a>
    {% endif %}

    <a href="{{ url_for('history') }}">지금까지 보낸 요청 확인하기</a>
</body>
</html>

'python > flask' 카테고리의 다른 글

flask#2  (0) 2025.04.01