Flask + MongoDB極簡登錄示例代碼(mongodb如何登錄)
基本原理
這段代碼是一個使用Flask框架的簡單登錄和注冊系統(tǒng)。它使用了Flask-PyMongo擴展來連接MongoDB數據庫,Flask-Login擴展來處理用戶認證。以下是代碼的主要部分:
- 導入所需的庫和模塊。
- 初始化Flask應用,配置MongoDB連接和Flask-Login。
- 定義User類,用于表示用戶。
- 定義路由和視圖函數,處理主頁、注冊、登錄、注銷和受保護頁面的請求。
- 定義user_loader函數,用于從用戶ID加載用戶對象。
- 如果是主模塊,運行Flask應用。
示例代碼
from flask import Flask, request, render_template,redirect,url_forfrom flask_pymongo import PyMongofrom flask_login import LoginManager, UserMixin, login_user, current_user, login_required, logout_userfrom dotenv import load_dotenvimport osapp = Flask(__name__)load_dotenv()app.config["MONGO_URI"] = f"mongodb srv://intumu.com:{os.getenv('config_MONGO_URI')}@intumu.com/user"app.secret_key = os.getenv('app_secret_key')mongo = PyMongo(app)login_manager = LoginManager()login_manager.init_app(app)class User(UserMixin): pass@app.route("/")def home_page(): return render_template("home.html",current_user=current_user)@app.route("/register", methods=['GET', 'POST'])def register_page(): error_message = "" if request.method == 'POST': email = request.form['email'] username = request.form['username'] password = request.form['password'] existing_email = mongo.db.user.find_one({'email': email}) existing_username = mongo.db.user.find_one({'username': username}) if existing_email: error_message = "nEmail already exists!" if existing_username: error_message = "nUsername already exists!" if not existing_email and not existing_username: user = {'email': email, 'username': username, 'password': password} mongo.db.user.insert_one(user) return redirect(url_for('login_page')) return render_template("register.html",error_message=error_message,current_user=current_user)@app.route("/login", methods=['GET','POST'])def login_page(): error_message = "" if request.method == 'POST': if current_user.is_active: return 'has logined' username = request.form['username'] password = request.form['password'] user_find = mongo.db.user.find_one({'username': username}) if user_find and user_find['password']==password: user = User() user.id = username login_user(user) return render_template("home.html",current_user=current_user) elif user_find: error_message = 'nWrong password' else: error_message = "nUnknown username" return render_template("login.html",error_message=error_message,current_user=current_user) return render_template("login.html")@login_manager.user_loader def user_loader(username): user = User() user.id = username return user @app.route('/logout') def logout_page(): if current_user.is_active: logout_user() return 'Logged out' else: return "you aren't login"@app.route('/protected') @login_required # intumu.comdef protected_page(): if current_user.is_active: return 'Logged in as: ' current_user.id 'Login is_active:True'if __name__ == '__main__': app.run(debug=True,port=8000)
注意事項
- 在運行此代碼之前,請確保已安裝所有必需的庫和模塊,并正確配置MongoDB連接。
- 為了安全起見,不要在代碼中直接存儲敏感信息,如數據庫連接字符串和密鑰。在這個例子中,我們使用了Python的dotenv庫來加載環(huán)境變量。
- 在生產環(huán)境中,不要使用Flask的默認開發(fā)服務器,而應該使用更強大的WSGI服務器,如Gunicorn或uWSGI。
- 在處理用戶輸入時,始終要注意防止SQL注入和其他安全漏洞。在這個例子中,我們使用了MongoDB的查詢方法,它已經自動處理了這些問題。
civilpy:Python數據分析及可視化實例目錄942 贊同 · 36 評論文章