>백엔드 개발 >파이썬 튜토리얼 >사용자 계정 로그인 상태 기록 상세 예(python)

사용자 계정 로그인 상태 기록 상세 예(python)

Y2J
Y2J원래의
2017-04-26 11:15:262233검색

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(&#39;logout&#39;)}}" rel="external nofollow" >登出</a></li>
    {% else %}
      <li><a href="{{url_for(&#39;login&#39;)}}" 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.