Flask 기반 웹 애플리케이션의 탄생은 여섯 번째 기사입니다. 이 기사에서는 주로 사용자 계정 로그인 상태 기록 기능의 개발을 소개합니다. 관심 있는 친구들은
을 참조하세요. 이전에 로그인과 회원가입 기능이 완료됐는데, 로그인에 성공하고 홈페이지로 돌아오니 아직도 백지의 광활한 모습을 발견했습니다. 네, 블로그에는 늘 제목이 적혀 있었기에 최종 목표는 이렇습니다. 가벼운 블로그를 쓰려고 하는데 글을 올리기 전에 먼저 로그인 상태를 기록해 두는 게 맞나요?
사용자 로그인
로그인 상태를 기록하는 방법에는 여러 가지가 있지만, 가장 먼저 떠오르는 것은 플라스크와 함께 제공되는 세션을 이용하는 것입니다. 플라스크는 또한 더 편리한 확장 기능인 플라스크 로그인 패키지를 제공하며 이전과 동일한 방식으로 사용할 수 있습니다. 먼저 이를 설치해야 합니다:
pip3.6 install flask-login
그리고 나서 default.py에서 초기화합니다:
from flask.ext.login import LoginManager ...... login_manager=LoginManager() login_manager.session_protection="strong" #可设置为None,basic,strong已提供不同的安全等级 login_manager.login_view="login" #设置登录页
그런 다음 필요에 따라 수정하세요. Flask-Login에서는 User 모델이 다음 네 가지 메서드를 구현해야 하기 때문에 User 모델을 수정해야 합니다.
is_authenticated() 로그인 여부를 결정하고 로그인한 후 True를 반환하고 그렇지 않으면 False를 반환
is_active() 로그인 허용 여부, 즉 사용자가 비활성화되었는지 여부, 비활성화된 경우 False를 반환
is_anonymous() False일반 사용자의 경우
get_id() 유니코드 인코딩을 사용하여 사용자의 고유 식별자를 반환합니다
이 네 가지 방법은 다음에서 직접 구현할 수 있습니다. User 모델이 있지만 Flask-Login에서 제공하는 UserMixin 클래스를 상속하는 더 간단한 방법이 있습니다. 이 클래스에는 이러한 메서드의 기본 구현이 포함되어 있습니다. 수정된 User 모델은 다음과 같습니다.
from flask.ext.login import UserMixin class User(UserMixin,db.Model): __tablename__="users" id=db.Column(db.Integer,primary_key=True) ......
flask-login 또한 콜백 기능을 구현하려면 프로그램이 필요하며 지정된 식별자는 사용자를 홈으로 사용하는 데 사용됩니다.
@login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id))
이후에는 플라스크 로그인 프레임워크를 쉽게 사용하고 탐색 부분을 계속해서 수정할 수 있습니다. 사용자 이름과 해당 정보를 표시하는 홈페이지 템플릿:
{%extends "bootstrap/base.html "%} {% block title%}牛博客 {% endblock %}<!--覆盖title标签--> {% block navbar %} <nav class="navbar navbar-inverse"><!-- 导航部分 --> <p class="navbar-header"> <a class="navbar-brand" href="#" rel="external nofollow" rel="external nofollow" > 牛博客 </a> </p> <p class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="/" rel="external nofollow" >首页</a></li> </ul> <ul class="nav navbar-nav navbar-right"> {% if current_user.is_authenticated %} <li><p class="navbar-text"><a href="#" rel="external nofollow" rel="external nofollow" class="navbar-link">{{current_user.username}}</a> 您好</p></li> <li><a href="{{url_for('logout')}}" rel="external nofollow" >登出</a></li> {% else %} <li><a href="{{url_for('login')}}" rel="external nofollow" >登录</a></li> {% endif %} </ul> </p><!-- /.navbar-collapse --> </nav> {% endblock %} {% block content %} <!--具体内容--> <p class="container"> </p> {% endblock %}
여기에 url_for 메소드가 나타나며, 주요 기능은 이를 프로그램에서 사용하는 것입니다. 메소드 이름을 전달하는 등의 정보를 기반으로 URL을 생성합니다. url_for('index',age=5)와 같은 메소드의 동적 매개변수를 통해 URL 매개변수를 생성할 수도 있습니다. 결과는 /?age=5
입니다. 주요 내용은 로그인 여부를 확인하는 것입니다. 로그인된 경우에는 {{username}} hello를 표시하고 로그아웃 기능을 제공합니다.
로그인 양식 수정:
class LoginForm(Form): username=StringField("请输入用户名",validators=[DataRequired()]) password=PasswordField("请输入密码") remember_me=BooleanField("记住我") submit=SubmitField("登录")
기억 항목 추가, BooleanField는 기본적으로 다중 선택 버튼으로 설정
로그인 보기 방법 수정:
@app.route("/login",methods=["GET","POST"]) def login(): form=LoginForm() if form.validate_on_submit(): username = form.username.data password = form.password.data user = User.query.filter_by(username=username, password=password).first() if user is not None: login_user(user,form.remember_me.data) return redirect(url_for("index")) else: flash("您输入的用户名或密码错误") return render_template("/login.html",form=form) # 返回的仍为登录页 return render_template("/login.html",form=form)
여기서 login_user는 Flask_login 플러그인은 사용자 로그인을 설정하기 위해 제공됩니다. 두 번째 매개변수는 Remember me 옵션입니다. True를 입력하면 쿠키 저장 상태가 제공됩니다. 그렇지 않으면 브라우저를 닫으면 취소됩니다.
새로운 로그아웃 방법입니다. :
@app.route("/logout",methods=["GET","POST"]) @login_required def logout(): logout_user() return redirect(url_for("index"))
이 방법은 매우 간단합니다. 플라스크 로그인에서 제공하는 로그아웃 방법을 사용하세요. @login_required 데코레이터는 로그인한 사용자만 이 보기 방법에 액세스할 수 있음을 나타냅니다.
테스트를 실행하고 홈페이지 주소를 입력하세요:
오른쪽 상단의 로그인 버튼을 클릭하세요:
사용자 이름 zhangji와 비밀번호 123을 입력하고 기억하기를 선택하고 확인을 클릭하세요.
빨간색 선 부분에 주의하세요. 표시가 정상입니다. 로그를 클릭하세요. 이때 출력 :
빨간색 선을 주의해서 초기 상태로 돌아갑니다.
장 결론
다음 단계는 게시 및 팔로우 기능이어야 했지만 이제 코드가 default.py에 있다는 것이 분명하고 점점 더 코드 구조를 처리할 수 없으므로 이 장의 길이가 상대적으로 짧습니다. 다음 장에서는 기존 코드를 리팩토링하고 함수를 그룹화하는 데 중점을 두고 다음 함수를 계속 작성합니다. 시청해 주셔서 감사합니다.
위 내용은 사용자 계정 로그인 상태 기록 상세 예(python)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!