Flask 웹 개발 처리 세 션
상기 사례 에서 우 리 는 다음 과 같은 기능 을 수정 하고 추가 해 야 한다.
1、로그 인 성공 후 url 은 더 이상http://192.168.142.138/home?username=admin
...이다http://192.168.142.138/home
페이지 에 표 시 된 username 정 보 는 템 플 릿 코드 에서 session 에서 가 져 옵 니 다.
2,로그 인 하기 전에 브 라 우 저 입력http://192.168.142.138/xxxx 주소http://192.168.142.138/login페이지,
로그 인 성공 후 입장 합 니 다http://192.168.142.138/xxxx페이지그 중 xxx 는 이미 존재 하 는 url 이다.
다음은 우리 가 한 걸음 한 걸음 실현 하 겠 습 니 다.
1.run.py 파일 을 수정 합 니 다.수 정 된 파일 의 내용 은 다음 과 같 습 니 다.
from flask import Flask
from flask import render_template, redirect,url_for
from flask import request,session
app = Flask(__name__)
@app.route('/login', methods=['POST','GET'])
def login():
error = None
if request.method == 'POST':
if request.form['username']=='admin':
session['username'] = request.form['username']
return redirect('/home')
else:
error = 'Invalid username/password'
return render_template('login.html', error=error)
@app.route('/home')
def home():
return render_template('home.html',username=session['username'])
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
if __name__ == '__main__':
app.debug = True
app.run('0.0.0.0',80)
수 정 된 내용 은:1)로그 인 에 성 공 했 습 니 다.session[username]=request.form[username]과 같은 코드 를 session 에 저장 합 니 다.
2)로그 인 에 성 공 했 습 니 다.홈 으로 다시 설정 합 니 다.username 조회 파 라 메 터 를 가 져 올 필요 가 없습니다.
3)홈()방법 으로 템 플 릿 에 들 어 오 는 username 인 자 는 session 에서 직접 사용 합 니 다.
4)세 션 을 효과적으로 하기 위해 서 는 키 를 설정 해 야 한다
메모:위의 코드 에 문제 가 있 습 니 다.로그 인 하기 전에 브 라 우 저 에 홈 을 직접 입력 하면 오류 가 발생 할 수 있 습 니 다.이 때 session 에 username 이 존재 하지 않 기 때 문 입 니 다.이 문 제 는 우리 가 아래 에서 해결 할 것 이다.
app.debug=true 설정 을 추 가 했 기 때문에 run.py 가 수정 되면 서비스 가 자동 으로 재 개 됩 니 다.이때 우 리 는 브 라 우 저 에서 다시 방문 하여 발견 하 였 다. 로그 인 성공 후 url 은 더 이상http://192.168.142.138/home?username=admin 보다http://192.168.142.138/home。 이렇게 문장 첫머리 에 말 한 첫 번 째 문 제 는 해결 되 었 다.
다음은 두 번 째 문 제 를 해결 하 겠 습 니 다.
2.templates 디 렉 터 리 에 test.html 파일 을 추가 하면 내용 은 마음대로 문자 일 수 있 습 니 다.
로그 인 하기 전에 브 라 우 저 에 test.html 를 입력 하면 login 페이지 로 이동 하고 로그 인 에 성공 하면 test.html 페이지 로 자동 으로 이동 합 니 다.
3.run.py 에 test.html 경로,코드 를 추가 합 니 다.
@app.route('/test')
def test():
return render_template('test.html');
4.run.py 파일 을 수정 하고 수정 한 내용 은 다음 과 같 습 니 다.
from flask import Flask
from flask import render_template, redirect,url_for
from flask import request,session
app = Flask(__name__)
@app.route('/login', methods=['POST','GET'])
def login():
error = None
if request.method == 'POST':
if request.form['username']=='admin':
session['username'] = request.form['username']
if 'newurl' in session:
newurl = session['newurl']
session.pop('newurl', None)
return redirect(newurl)
else:
return redirect('/home')
else:
error = 'Invalid username/password'
return render_template('login.html', error=error)
@app.route('/home')
def home():
return render_template('home.html',username=session['username'])
@app.route('/test')
def test():
if 'username' in session:
return render_template('test.html')
else:
session['newurl']='test'
return redirect(url_for('login'))
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
if __name__ == '__main__':
app.debug = True
app.run('0.0.0.0',80)
위의 코드 는 앞 과 비교 합 니 다.test 요청 의 응답 처리 에서 session 에 username 이 존재 하 는 지 판단 하고 존재 하지 않 으 면 login 페이지 로 이동 하여 test 주 소 를 session 에 저장 합 니 다.그리고 login 의 post 요청 에서 newurl 이 존재 하 는 지 확인 합 니 다.존재 하면 다른 페이지 에서 로그 인 페이지 로 이동 한 다 는 뜻 입 니 다.이렇게 로그 인 에 성공 한 후에 해당 페이지 로 이동 합 니 다.부족 한 점 은 홈 페이지 로 이동 합 니 다.
이렇게 해서 우리 글 에서 처음에 제기 한 두 번 째 문제 도 해 결 된 것 처럼 보인다.왜 보인다 고 하 죠?실제로 문제 가 있 기 때문이다.테스트 요청 에 대한 특별 처리 입 니 다.우 리 는 모든 요청(문제 가 있 는 홈 요청 포함)을 차단 하여 로그 인 여 부 를 판단 하고 로그 인 하지 않 으 면 로그 인 페이지 로 이동 할 수 있어 야 합 니 다.
이 문 제 는 우리 가 후속 적 인 글 에서 처리 하 는 핵심 적 인 사 고 는 모든 구체 적 인 경로 코드 에 도달 하기 전에 로그 인 여 부 를 차단 하고 판단 하 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.