본문으로 바로가기

[웹크롤링 개인프로젝트#2]로그인 구현하기

category 2019/1월 2018. 12. 18. 23:40

로그인 페이지 구현하기

프로그램을 허가된 사용자만 접속할 수 있도록 로그인 페이지를 구현할것이다. FLASK에 익숙해질 겸 지금은 DB의 내용을 가져와서 사용자를 구별하는 방식은 나중으로 밀어두고 사용자 아이디와 비밀번호를 하드코딩으로 밀어넣고 테스트를 하였다.

이후 DB를 붙이고 나서 캐쉬를 이용한 로그인 유지 기능도 넣을 예정이다.


FLASK

from flask import Flask

app = Flask(__name__)

@app.route('/')
def main_get(message=None):
return render_template('login.html')


if __name__ == '__main__':

app.run()

Flask의 기본적인 구조이다.

Flask라는 클래스의 객체를 생성하고 인수로써 __name__을 입력한다.해당 객체의 이름은 app으로 설정된다. @app.route('/')는 생성한 객체의 route를 설정 해준다. 해당 URL로 들어오게 되면 그 아래의 함수가 실행된다.  main_get 함수는 template 디렉토리에서 'login.html'파일을 찾아 랜더링 해준다. 마지막 줄은 객체의 run함수를 이용하여 로컬서버에서 어플리케이션을 실행하도록 한다.


from flask import Flask, render_template, request, url_for, redirect

app = Flask(__name__)

@app.route('/')
def main_get(message=None):
return render_template('login.html', message = message)

@app.route('/login', methods=['POST', 'GET'])
def login(message=None):
if request.method == 'POST':
return None
elif request.method == 'GET':
id = request.args.get('id')
pw = request.args.get('pwd')
if(id == 'admin' and pw == '1234'):
return redirect(url_for('index'))
else:
message = '아이디 또는 비밀번호가 틀렸습니다'
return message

@app.route('/index', methods=['POST', 'GET'])
def index():
return render_template('index.html')
if __name__ == '__main__':
# threaded=True 로 넘기면 multiple plot이 가능해짐
app.run(debug=True, threaded=True, port='5005')

제일 처음, localhost:5005로 접속을 하게 되면 main_get의 함수를 타게 되고 login.html 페이지를 랜더링 하게 된다. 


로그인 페이지에서 Id와 Password를 GET으로 넘기게 된다.


<form class="form-signin" method="GET" action="/login" id="loginForm" name="loginForm" >
<label for="id" class="sr-only">Id</label>
<input id="id" name="id" class="form-control" placeholder="Id" required>
<label for="pwd" class="sr-only">Password</label>
<input type="password" id="pwd" name="pwd" class="form-control" placeholder="Password" required>
<button class="btn btn-lg btn-primary btn-block" id="loginBtn" type="submit">Sign in</button>
<p class="mt-5 mb-3 text-muted">&copy; 2018</p>

</form>


이 스크립트는 form을 다루고 있다. HTTP POST 메소드를 사용하고 있고, 이 폼을 전달하면 http://localhost:5000/login으로 이동할 것이다. form 데이터는 Name, Physics, Chemistry, Maths를 전달한다. form 데이터를 제출할 ‘submit’도 있다.

Sign in 버튼을 누르게 되면 input 태그의 name 속성값 두개를 URL에 포함시켜서 넘기게 된다. 그렇게 되면 login 함수에서 넘겨 받은 id,pwd 값을 읽고 하드 코딩한 admin, 1234와 같은지 비교하고 맞으면 index함수를 찾아 실행하고 index에서 로그인 이 후 페이지를 랜더링 한다.



url_for 관련해서는 조금 더 공부 한 뒤 포스팅 해야겠다


'2019 > 1월' 카테고리의 다른 글

[웹크롤링 개인프로젝트#3] Flask - url_for()  (0) 2018.12.22
[웹크롤링 개인프로젝트#1]개발환경  (0) 2018.12.15