亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 基于Flask的Web開發【1】【用戶登錄 注冊】

發布時間:2020-03-25 16:41:08 來源:網絡 閱讀:2576 作者:流域哈哈 欄目:編程語言

實現目標

基于Flask實現用戶的登錄/注冊。

設計思路

  • 前端
    1.編寫登錄和注冊表單
    2.編寫視圖函數
    3.編寫相應的html文件
    4.頁面測試
  • 后臺
    1.創建數據庫
    2.修改配置文件
    3.編寫數據表類并生成數據表
    4.修改視圖函數,實現數據交互

前端實現

1.編寫登錄和注冊表單(/app/home/forms.py)
# 導入表單基類
from flask_wtf import FlaskForm
# 導入需要用到的表格類型
from wtforms import StringField, PasswordField, SubmitField
# 導入需要用的驗證方式
from wtforms.validators import DataRequired, EqualTo, Length, Email

# 用戶注冊表單
class RegisterForm(FlaskForm):
    # 用戶名表框
    username = StringField(
        label= '用戶名',    # 標簽
        validators=[        # 驗證方式
            DataRequired()  # 不能為空
        ]
    )
    # 密碼表框
    password = PasswordField(
        label='密碼',
        validators=[
            DataRequired(),
            Length(6,16,message='密碼長度應在6-16位') # 密碼長度必須在6-16,否則輸出提示信息
        ]
    )
    # 郵箱表框
    email = StringField(
        label='郵箱',
        validators=[
            DataRequired(),
            Email(message='郵箱不合法')
        ]
    )
    # 注冊按鈕
    submit = SubmitField(
        label='注冊'
    )

# 登錄表單
class LoginForm(FlaskForm):
    username = StringField(
        label='用戶名',
        validators=[
            DataRequired()
        ]
    )

    password = PasswordField(
        label='密碼',
        validators=[
            Length(6, 16, message='密碼長度應在6-16位')
        ]
    )

    submit = SubmitField(
        label='登錄'
    )

2.編寫視圖函數(/app/home/views.py)
from . import home_bp # 導入藍圖
from flask import render_template # 用于模板渲染

@home_bp.route('/')
def index():
    return render_template('index.html')

@home_bp.route('/login/',methods =['GET','POST'])
def login():
    from app.home.forms import LoginForm
    form = LoginForm()
    return render_template('login.html',form=form)

@home_bp.route('/register/',methods =['GET','POST'])
def register():
    from app.home.forms import RegisterForm
    form = RegisterForm()
    return render_template('register.html',form=form)

3.編寫相應的html文件
  • 基模板(/app/templates/base.html)
    為了統一頁面風格,繼承bootstrap/base.html,創建自己的基模板

  • 登錄頁面(/app/templates/login.html)
    登錄頁面,繼承自上面的base.html,并在content中生成登錄表單

  • 注冊頁面(/app/templates/register.html)
    注冊頁面,繼承自上面的base.html,并在content中生成注冊表單

4.測試效果

Python 基于Flask的Web開發【1】【用戶登錄 注冊】
Python 基于Flask的Web開發【1】【用戶登錄 注冊】


后臺實現

1.創建數據庫
mysql shell中創建數據庫

Python 基于Flask的Web開發【1】【用戶登錄 注冊】


2.修改配置文件
    在配置文件中添加代碼如下:
# 數據庫配置
SQLALCHEMY_DATABASE_URI ="mysql://root:mysql@locallost/sentry" # 指定數據庫
SQLALCHEMY_TRACK_MODIFICATIONS = False # 關閉追蹤

3.編寫數據表類并生成數據表
    在models.py中編寫數據表結構如下:
from app import db

# 用戶數據表
class User(db.Model):
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    name = db.Column(db.String(30),unique=True)
    password = db.Column(db.String(300))
    email = db.Column(db.String(40),unique=True)

    def __repr__(self):
        return "<User %s>"%self.name
    在__init__.py中利用SQLAlchemy實例化數據庫對象
from flask_sqlalchemy import SQLAlchemy
import pymysql

# 數據庫報錯問題
pymysql.install_as_MySQLdb()
# 讀取配置文件的配置信息
app.config.from_pyfile('../config.py')
db = SQLAlchemy(app)
    在manage.py中添加代碼如下:
from app import db # 導入數據庫對象
from werkzeug.security import generate_password_hash  # 哈希加密
from app.models import User # 導入數據表類

@manager.command  # 使函數可以作為命令在shell中直接執行
def db_init():
    db.drop_all() # 刪除已有數據表
    db.create_all() # 創建新數據表
    admin = User(name='admin', password=generate_password_hash('admin')) # 實例化一個用戶對象
    db.session.add(admin) # 添加入session
    db.session.commit() # 提交給數據庫
    print("數據庫初始化成功")
    在python shell 中執行 python manage.py db_init 即可完成數據庫初始化
    在mysql中查看

Python 基于Flask的Web開發【1】【用戶登錄 注冊】


4.修改視圖函數,實現數據交互
from werkzeug.security import generate_password_hash # 哈希加密

from app import db
from . import home_bp # 導入藍圖
from flask import render_template, redirect, request, flash, session, url_for

@home_bp.route('/')
def index():
    return render_template('index.html')

# 登錄
@home_bp.route('/login/',methods =['GET','POST'])
def login():
    from app.home.forms import LoginForm
    from app.models import User
    form = LoginForm()
    if form.validate_on_submit():
        # 獲取表單中的數據
        username = form.username.data
        password = form.password.data
        # 在數據庫中查找
        user = User.query.filter_by(name = username).first()
        # 用戶名和密碼匹配成功時
        if user and user.verify_password(password):
            # 登陸成功將用戶信息添加到session信息中去
            session['user']=user.name
            session['id']= user.id
            flash('登錄成功')
            return redirect(url_for('home.index'))
        flash('用戶名或密碼錯誤')

    return render_template('login.html',form=form)

# 注冊
@home_bp.route('/register/',methods =['GET','POST'])
def register():
    from app.home.forms import RegisterForm
    from app.models import User
    form = RegisterForm()
    if form.validate_on_submit():
        # 獲取表單中的數據
        name = form.username.data
        password = form.password.data
        email = form.email.data
        if User.query.filter_by(name=name).first():
            flash('用戶名已存在')
            return redirect(url_for('home.register'))
        if User.query.filter_by(email=email).first():
            flash('郵箱已占用')
            return redirect(url_for('home.register'))
        # 密碼進行哈希加密
        user = User(name=name,password=generate_password_hash(password),email=email)
        db.session.add(user)
        db.session.commit()
        flash('注冊成功,請登錄')
        return redirect(url_for('home.login'))
    return render_template('register.html',form=form)

# 注銷
@home_bp.route('/logout/')
def logout():
        # 清除session信息
    session.clear()
    return redirect(url_for('home.login'))

部分測試結果

Python 基于Flask的Web開發【1】【用戶登錄 注冊】
Python 基于Flask的Web開發【1】【用戶登錄 注冊】

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雅安市| 上犹县| 安化县| 灵武市| 新巴尔虎左旗| 洪湖市| 德安县| 象山县| 东山县| 清河县| 邵东县| 阿克苏市| 夏邑县| 朔州市| 许昌县| 常山县| 云梦县| 武威市| 巴南区| 镇宁| 深州市| 桦川县| 德保县| 临安市| 铁力市| 闽清县| 乐昌市| 胶州市| 化隆| 太湖县| 措美县| 开鲁县| 合阳县| 晋宁县| 青岛市| 连山| 合肥市| 遂平县| 晋中市| 临颍县| 永昌县|