ホームページ  >  記事  >  バックエンド開発  >  ユーザーアカウントのログイン状態を記録する詳細な例(Python)

ユーザーアカウントのログイン状態を記録する詳細な例(Python)

Y2J
Y2Jオリジナル
2017-04-26 11:15:262122ブラウズ

Flask をベースにした Web アプリケーションの誕生の第 6 回目の記事です。この記事では主にユーザー アカウントのログイン状態を記録する機能の開発について紹介します。興味のある友人はそれを参照できます。

すべての以前のログイン状態。登録機能は完了しましたが、ログインに成功してホームページに戻ると、まだ空白であることがわかりました。タイトルは常にブログなので、最終的な目標は軽いブログを書くことです。記事を公開する前にログイン状況を記録するには?

ユーザーログイン

ログインステータスを記録するには、flask に付属のセッションを使用する方法がたくさんありますが、flask には、より便利な拡張機能である flask-login パッケージも提供されています。使用方法 前と同様に、最初にインストールする必要があります:

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" #设置登录页

次に、必要に応じて User モデルを変更します。これは、Flask-Login では User モデルが 4 つのメソッドを実装する必要があるためです。

is_authenticated() ログインするかどうかを決定し、login は True を返し、それ以外の場合は False を返します
is_active() ログインが許可されているかどうか、つまりユーザーが無効になっているかどうか、無効の場合は False を返します
is_anonymous() False 一般ユーザーの場合
get_id() Unicode エンコーディングを使用して、ユーザーの一意の識別子を返します

これら 4 つのメソッドは User モデルに直接実装できますが、より簡単な方法があります。 Flask-Login によって提供される UserMixin クラスには、これらのメソッドのデフォルト実装を置き換えた後、変更されたユーザー モデルは次のようになります。

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))

では、flask ログイン フレームワークを簡単に使用して、ホームページ テンプレートのナビゲーション部分を変更して、ユーザー名と対応する情報を表示できます:

{%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 は、メソッドの動的パラメーターを通じて生成することもできます。たとえば、url_for('index',age=)。 5) は /?age=5 です

主な内容は、ログインするかどうかを決定することです。ログインしている場合は、{{ユーザー名 }} こんにちはと表示され、ログアウト機能が提供されます。そうでない場合は、ログインリンクが表示されます。

ログインフォームを変更します:

class LoginForm(Form):
  username=StringField("请输入用户名",validators=[DataRequired()])
  password=PasswordField("请输入密码")
  remember_me=BooleanField("记住我")
  submit=SubmitField("登录")

「Remember Me」項目を追加します。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 プラグインによって提供されます。ユーザー ログインを設定し、2 番目のパラメータは [To remember me] オプションです。True を入力すると、Cookie ストレージ ステータスが提供されます。それ以外の場合、ブラウザを閉じるとブラウザ ステータスがキャンセルされます

新しいログアウト メソッド:

@app.route("/logout",methods=["GET","POST"])
@login_required
def logout():
  logout_user()
  return redirect(url_for("index"))

このメソッドはい、 @login_required デコレータは、ログインしているユーザーのみがこのビュー メソッドにアクセスできることを示していることに注意してください。

テストを実行し、ホームページのアドレスを入力します:

右上隅のログインボタンをクリックします:

ユーザー名 zhangji パスワード 123 を入力し、[私を記憶する] を選択し、[OK] をクリックします:

赤い線に注意してください。表示は正常です。この時点でクリックしてログアウトします:

赤い線に注意して、初期状態に戻ります。

章の結論

次のステップは post 関数と follow 関数であるはずですが、明らかに、コードは現在 default.py にあり、コード構造はますます扱いにくくなっているため、この章の長さは比較的長くなります。次の章では、既存のコードのリファクタリングと関数のグループ化に焦点を当ててから、次の関数の作成を続けます。見てくれてありがとう。

以上がユーザーアカウントのログイン状態を記録する詳細な例(Python)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。