본문 바로가기
공부기록/Python

6월 15일 python - Web2

by project100 2023. 6. 15.

Flask 웹 서버 구현

 

Flask 실 ip 설정

    ap.run(debug=True, port=5000, host='0.0.0.0')

    host='자신의 컴퓨터의 실제 ip'

 

* 자신의 컴퓨터의 실제 확인하기 : 네트워크 - 이더넷 속성 - IPv4

* 터미널에서 확인하는 방법 : ipconfig 

 

static 폴더 활용

templates와 함께 사용할 때는 static 폴더를 생성하여 이미지나 css, js 등의 웹 자원 활용

url_for() 함수로 정적 자원을 처리

형식)

     url_for('static', filemname='가져올자원파일명' )

 

먼저 작업 폴더에 static 폴더를 만들고, 하위 폴더로 css, js, images 등의 이름으르 자원 폴더를 생성.

 

참고) Flask의 템플릿 엔진 - Jinja2

Thymeleaf와 같은 동적 웹 처리용 엔진

변수, 제어문 등을 활용하여 동적 데이터 처리.

{{ 변수 }}, {% 제어문 %} 등

 

@ 어노테이션(자바), 데코레이터(파이썬)

 

html 문서

tempates 폴더 - 폴더 안에서 html을 작성하면 자동완성이 되지 않으므로 바깥쪽에서 작성한 후 안 쪽에 넣어주기~

저장 안 하면 화면 안 뜸!

 

딕셔너리 형식으로 전송됨 name(키) : data(값)로 설정됨

 

<간단한 계산기>

form형식 get 방식 -> request.args.get으로 꺼내옴 html의 name에 지정한 이름을 가져옴

http://127.0.0.1:5000/calproc?num1=5&num2=10

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>계산기</title>
</head>
<body>
    <h1>간단한 계산기</h1>
    <form action="calproc">
        <p><input type="number" name="num1"></p>
        <p><input type="number" name="num2"></p>
        <input type="submit" value="계산"> 
    </form>
</body>
</html>

 

<로그인>

form형식 post방식 -> request.form.get으로 꺼내옴 html의 name에 지정한 이름을 가져옴

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>login</title>
</head>
<body>
    <h1>로그인</h1>
    <form action="loginproc" method="post">
         <p><input type="text" name="id" required placeholder="아이디"></p>
         <p><input type="password" name="pwd" required placeholder="비밀번호"></p>
         <p><input type="submit" value="로그인"></p>
    </form>
</body>
</html>

 

파이썬

from flask import Flask, render_template, request

# flask 객체 생성
ap = Flask(__name__)

# url 매핑 함수 작성
@ap.route('/')
def home():
    return render_template('home.html')

@ap.route('/calcul')
def calcul():
    return render_template('calcul.html')

@ap.route('/calproc', methods=['GET'])
def calproc():
    n1 = request.args.get('num1', "") # defult 값으로 공백 또는 False
    n2 = request.args.get('num2', "")  
    print(n1, n2)
    n1 = int(n1)
    n2 = int(n2)
    return f'{n1} + {n2} = {n1 + n2}'
    
@ap.route('/login')
def login():
    return render_template('login.html')

@ap.route('/loginproc', methods=['POST'])
def loginproc():
    id = request.form.get('id', '')
    pwd = request.form.get('pwd', '')
    print(id, pwd)
    return render_template('home.html')
    
# 실행
if __name__ == '__main__':
    ap.run(debug=True)

 

get, post 하나로 합치기

@ap.route('/login', methods=['POST', 'GET'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        id = request.form.get('id', '')
        pwd = request.form.get('pwd', '')
        print(id, pwd)
        return render_template('home.html')

html 파일 -> action "loginproc"에서 "login"으로 수정

 

연습

Flask로 자기소개 사이트 개설하기

'공부기록 > Python' 카테고리의 다른 글

6월 15일 python - GUI(tkinker)  (0) 2023.06.15
6월 14일 (2) python - Web  (0) 2023.06.14
6월 14일 (1) python - 예외처리, 패키지  (0) 2023.06.14
6월 13일 python - 클래스  (0) 2023.06.13
6월 12일 (2) python - 모듈  (0) 2023.06.12