国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

輕量級Web框架Flask(二)

這篇具有很好參考價值的文章主要介紹了輕量級Web框架Flask(二)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Flask-SQLAlchemy

MySQL是免費(fèi)開源軟件,大家可以自行搜索其官網(wǎng)(https://www.MySQL.com/downloads/)

測試MySQL是否安裝成功

在所有程序中,找到MySQL→MySQL Server 5.6下面的命令行工具,然后單擊輸入密碼后回車,就可以知道MySQL數(shù)據(jù)庫是否鏈接成功。

右擊桌面上的“計(jì)算機(jī)”,在彈出的快捷鍵菜單中選擇“屬性”|“高級系統(tǒng)設(shè)置”|“環(huán)境變量”,在path里面添加MySQL bin目錄的路徑。選擇環(huán)境變量,在環(huán)境變量中的path路徑下輸入你的MySQL路徑就行了。默認(rèn)安裝的路徑是C:\MySQL\MySQL Server 5.6\bin

安裝flask-sqlalchemy,安裝不了就更換豆瓣源

pip install flask-sqlalchemy

?對象-關(guān)系映射實(shí)質(zhì)

class  Lib_card(db.Model):
    __tablename__ = 'lib_card'
    id = db.Column(db.Integer, primary_key=True, comment='id號')
    card_id = db.Column(db.Integer, nullable=False, comment = '借書證')
    book_id = db.Column(db.Integer, db.ForeignKey('book.id'))
    books = db.relationship('Book', backref=db.backref('cards'),uselist=False)

在Flask-SQLAlchemy中,插入、修改、刪除操作均由數(shù)據(jù)庫會話管理

需要一個配置config.py

USERNAME= 'root'                                        #設(shè)置登錄賬號
PASSWORD= '930103'                                        #設(shè)置登錄密碼
HOST= '127.0.0.1'                                        #設(shè)置主機(jī)地址
PORT= '3306'                                                #設(shè)置端口號
DATABASE= 'demo1'                                #設(shè)置訪問的數(shù)據(jù)庫
SQLALCHEMY_DATABASE_URI= f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}'#創(chuàng)建數(shù)據(jù)庫連接示例
#動態(tài)追蹤修改設(shè)置,如未設(shè)置只會提示警告
SQLALCHEMY_TRACK_MODIFICATIONS=False
#查詢時會顯示原始SQL語句
SQLALCHEMY_ECHO= True

實(shí)例

from datetime import datetime

from flask import Flask                                                        #導(dǎo)入Flask模塊
from flask_sqlalchemy import SQLAlchemy               #導(dǎo)入SQLAlchemy模塊
import config                                                                 #導(dǎo)入配置文件
app= Flask(__name__)                                                        #Flask初始化
app.config.from_object(config)                                        #配置文件實(shí)例化
#初始化一個對象
db=SQLAlchemy(app)

class Book(db.Model):
    __tablename__ = 'book'
    id = db.Column(db.Integer, primary_key = True,comment='id號')
    title = db.Column(db.String(50), nullable=False,comment='書名')
    publishing_office = db.Column(db.String(100), nullable=False,comment='出版社')
    isbn = db.Column(db.String(100), nullable=False, comment='isbn號')
    storage_time = db.Column(db.DateTime, default=datetime.now(), comment='入庫時間')

class  Lib_card(db.Model):
    __tablename__ = 'lib_card'
    id = db.Column(db.Integer, primary_key=True, comment='id號')
    card_id = db.Column(db.Integer, nullable=False, comment = '借書證')
    book_id = db.Column(db.Integer, db.ForeignKey('book.id'))
    books = db.relationship('Book', backref=db.backref('cards'),uselist=False)

with app.app_context():
#測試數(shù)據(jù)庫連接是否成功
    db.create_all()     #創(chuàng)建數(shù)據(jù)庫
    # book1= Book(id=9,title='智能導(dǎo)論', publishing_office='高等教育出版社',isbn='9787040479844')
    # db.session.add(book1)
    # db.session.commit()
    # result = Book.query.filter(Book.id == 9).first()
    # print(result.title)
    # agine = Book.query.filter(Book.title == result.title).all()
    # for i in agine:
    #     print(i.id)
    # db.session.delete(result)
    # db.session.commit()
    # card1=Lib_card(card_id='18001', book_id='8')
    # card2=Lib_card(card_id='18002', book_id='8')
    # db.session.add(card1)
    # db.session.add(card2)
    # db.session.commit()
    book_query = Book.query.filter(Book.id == 9).first()
    lib_card_query = book_query.cards
    for i in lib_card_query:
        print(i.card_id)

@app.route('/')
def index():
    return 'index'

# if __name__== '__main__':
#     app.run(debug=True)

注意:一個表(模型)的定義必須要定義一個主鍵,這個主鍵一般為id。在定義了Lib_card類后,申明了一個外鍵,并且在relationship方法中使用uselist=False來約束其關(guān)系。book_id =db.Column(db.Integer,db.ForeignKey('book.id'))表示創(chuàng)建一個外鍵,類型要跟主表一樣,通過db.ForeignKey("user.id")與主表綁定books =db.relationship('Book',backref=db.backref('cards');uselist=False)表示Book可以根據(jù)Lib_card中的借書證查找到book表中的信息,backref="cards"表示book表可以直接通過cards查找到該書下的借書證號碼。

框架實(shí)例

建一個apps文件夾,添加一個admin包,admin包下創(chuàng)建三個py文件

#__init__.py
#預(yù)加載模塊內(nèi)容
#其他地方調(diào)用的時候 可以直接from apps.admin import bp as admin_bp不用找到views
from .views import bp
#forms.py
from flask_wtf import FlaskForm
from wtforms import *
from wtforms.validators import *

class NameForm(FlaskForm):
    username = StringField('用戶名',validators=[DataRequired()])
    password = PasswordField('密碼',validators=[DataRequired()])
    submit = SubmitField('提交')
#models.py
from exts import db

class User(db.Model):
    __tablename__ = 'jq_user'
    uid = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), nullable=False, comment="用戶名")
    password = db.Column(db.String(100), nullable=False,comment="密碼")
    email = db.Column(db.String(50), nullable=False, unique=True, comment = "郵箱")
#views.py
from flask import Blueprint, request, flash, render_template
from apps.admin.forms import NameForm
from apps.admin.models import User

bp = Blueprint("admin",__name__)

@bp.route("/admin",methods=['GET','POST'])
def index():
    form = NameForm()
    if request.method == 'POST':
        if form.validate_on_submit():
            username = request.form.get('username')
            password = request.form.get('password')
            result = User.query.filter(User.username==username).first()
            if result and password == result.password:
                flash('登錄成功')
            else:
                return render_template('login.html', form=form, errormsg="登陸失敗")
    return render_template('login.html', form=form)

建一個文件夾templates,專門放login.html文件,通過render_template調(diào)用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <h1>用戶注冊登錄</h1>
    <form method="post" action="/test/admin">
        {{ form.csrf_token()}}
        {{ form.username.label }}{{ form.username}}
        {{ form.password.label }}{{ form.password}}
        {{ form.submit }}{{errormsg}}

        {% for message in get_flashed_messages() %}
            {{ message }}
        {% endfor %}
    </form>
</head>
<body>

</body>
</html>

建一個app.py

from flask import Flask
from apps.admin import bp as admin_bp
from exts import db
from apps.common import bp as common_bp
from apps.front import bp as front_bp
from apps.admin.models import User
from apps.common.models import Book


def create_app():
    app = Flask(__name__)
    app.secret_key = '123321'
    #注冊藍(lán)圖,注冊時候可以設(shè)置前綴
    app.register_blueprint(admin_bp,url_prefix="/test")
    app.register_blueprint(common_bp)
    app.register_blueprint(front_bp)
    app.config.from_object('config')
    # db.app = app
    db.init_app(app)
    return app



if __name__ == '__main__':
    app = create_app()
    with app.app_context():
        db.create_all()
    app.run(host="127.0.0.1",port=1314,debug=True)

建一個config.py

DEBUG=True
USERNAME= 'root'                                        #設(shè)置登錄賬號
PASSWORD= '930103'                                        #設(shè)置登錄密碼
HOST= '127.0.0.1'                                        #設(shè)置主機(jī)地址
PORT= '3306'                                                #設(shè)置端口號
DATABASE= 'demo1'                                #設(shè)置訪問的數(shù)據(jù)庫
SQLALCHEMY_DATABASE_URI= f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}'#創(chuàng)建數(shù)據(jù)庫連接示例
#動態(tài)追蹤修改設(shè)置,如未設(shè)置只會提示警告
SQLALCHEMY_TRACK_MODIFICATIONS=False
#查詢時會顯示原始SQL語句
SQLALCHEMY_ECHO= True

建一個exts.py文章來源地址http://www.zghlxwxcb.cn/news/detail-413531.html

#encoding:utf-8
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()

到了這里,關(guān)于輕量級Web框架Flask(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠(yuǎn)程訪問界面

    輕量級web開發(fā)框架Flask本地部署及無公網(wǎng)ip遠(yuǎn)程訪問界面

    本篇文章講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)上并進(jìn)行遠(yuǎn)程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實(shí)現(xiàn)相關(guān)功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結(jié)合MVC模式進(jìn)行開發(fā),開發(fā)人員分工合作,小型團(tuán)

    2024年02月04日
    瀏覽(87)
  • 本地部署輕量級web開發(fā)框架Flask并實(shí)現(xiàn)無公網(wǎng)ip遠(yuǎn)程訪問開發(fā)界面

    本地部署輕量級web開發(fā)框架Flask并實(shí)現(xiàn)無公網(wǎng)ip遠(yuǎn)程訪問開發(fā)界面

    本篇文章主要講解如何在本地安裝Flask,以及如何將其web界面發(fā)布到公網(wǎng)進(jìn)行遠(yuǎn)程訪問。 Flask是目前十分流行的web框架,采用Python編程語言來實(shí)現(xiàn)相關(guān)功能。較其他同類型框架更為靈活、輕便、安全且容易上手。它可以很好地結(jié)合MVC模式進(jìn)行開發(fā),開發(fā)人員分工合作,小型團(tuán)

    2024年01月23日
    瀏覽(96)
  • Python光速入門 - Flask輕量級框架

    Python光速入門 - Flask輕量級框架

    ????????FlASK是一個輕量級的WSGI Web應(yīng)用程序框架,F(xiàn)lask的核心包括Werkzeug工具箱和Jinja2模板引擎,它沒有默認(rèn)使用的數(shù)據(jù)庫或窗體驗(yàn)證工具,這意味著用戶可以根據(jù)自己的需求選擇不同的數(shù)據(jù)庫和驗(yàn)證工具。Flask的設(shè)計(jì)理念是保持核心簡單,同時提供強(qiáng)大的擴(kuò)展性,用戶

    2024年03月14日
    瀏覽(224)
  • 深度學(xué)習(xí)模型部署——Flask框架輕量級部署+阿里云服務(wù)器

    深度學(xué)習(xí)模型部署——Flask框架輕量級部署+阿里云服務(wù)器

    ?因?yàn)閰⒓右粋€比賽,需要把訓(xùn)練好的深度學(xué)習(xí)模型部署到web端,第一次做,在網(wǎng)上也搜索了很多教程,基本上沒有適合自己的,只有一個b站up主講的還不錯 https://www.bilibili.com/video/BV1Qv41117SR/?spm_id_from=333.999.0.0vd_source=6ca6a313467efae52a28428a64104c10 https://www.bilibili.com/video/BV1Qv41117

    2024年02月07日
    瀏覽(95)
  • 使用Go語言打造輕量級Web框架

    前言 Web框架是Web開發(fā)中不可或缺的組件。它們的主要目標(biāo)是抽象出HTTP請求和響應(yīng)的細(xì)節(jié),使開發(fā)人員可以更專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。在本篇文章中,我們將使用Go語言實(shí)現(xiàn)一個簡單的Web框架,類似于Gin框架。 功能 我們的Web框架需要實(shí)現(xiàn)以下功能: 路由:處理HTTP請求的路由

    2023年04月08日
    瀏覽(92)
  • Qat++,輕量級開源C++ Web框架

    Qat++,輕量級開源C++ Web框架

    目錄 一.簡介 二.編譯Oat++ 1.環(huán)境 2.編譯/安裝 三.試用 1.創(chuàng)建一個 CMake 項(xiàng)目 2.自定義客戶端請求響應(yīng) 3.將請求Router到服務(wù)器 4.用瀏覽器驗(yàn)證 Oat++是一個面向C++的現(xiàn)代Web框架 官網(wǎng)地址:https://oatpp.io github地址:https://github.com/oatpp/oatpp Oat++具有如下特性: ●隨處運(yùn)行 Oat++沒有任何

    2024年02月01日
    瀏覽(109)
  • 輕量級Web報(bào)表工具ActiveReportsJS全新發(fā)布v4.0,支持集成更多前端框架!

    輕量級Web報(bào)表工具ActiveReportsJS全新發(fā)布v4.0,支持集成更多前端框架!

    ActiveReportsJS?是一款基于 JavaScript 和 HTML5 的輕量級Web報(bào)表工具,采用拖拽式設(shè)計(jì)模式,不需任何服務(wù)器和組件支持,即可在 Mac、Linux 和 Windows 操作系統(tǒng)中,設(shè)計(jì)多種類型的報(bào)表。ActiveReportsJS 同時提供跨平臺報(bào)表設(shè)計(jì)、純前端報(bào)表展示、多數(shù)據(jù)源綁定、前端打印導(dǎo)出等功能,

    2024年02月15日
    瀏覽(97)
  • C++輕量級單元測試框架

    單元測試是構(gòu)建穩(wěn)定、高質(zhì)量的程序、服務(wù)或系統(tǒng)的必不可少的一環(huán)。通過單元測試,我們可以在開發(fā)過程中及時發(fā)現(xiàn)和修復(fù)代碼中的問題,提高代碼的質(zhì)量和可維護(hù)性。同時,單元測試也可以幫助我們更好地理解代碼的功能和實(shí)現(xiàn)細(xì)節(jié),從而更好地進(jìn)行代碼重構(gòu)和優(yōu)化。

    2023年04月25日
    瀏覽(89)
  • 互聯(lián)網(wǎng)輕量級框架整合之設(shè)計(jì)模式

    互聯(lián)網(wǎng)輕量級框架整合之設(shè)計(jì)模式

    Java的反射技術(shù)能夠通過配置類的全限定名、方法和參數(shù)完成對象的初始化,甚至反射某些方法,大大的增強(qiáng)了Java的可配置型,這也是Spring IoC的底層原理,Java的反射技術(shù)覆蓋面很廣,包括對象構(gòu)建、反射方法、注解、參數(shù)、接口等等,而這一切都是通過 java.lang.reflect.* 來完成

    2024年04月11日
    瀏覽(90)
  • 《Java Web輕量級整合開發(fā)入門》學(xué)習(xí)筆記

    《Java Web輕量級整合開發(fā)入門》學(xué)習(xí)筆記

    輕量級Java Web整合開發(fā) 第一章 輕量級Java Web開發(fā)概述 1.2? java web 開發(fā)概述 1.JSP是一種編譯執(zhí)行的前臺頁面技術(shù)。對于每個JSP頁面,Web服務(wù)器都會生成一個相應(yīng)的Java文件,然后再編譯該Java文件,生成相應(yīng)的Class類型文件。在客戶端訪問到的JSP頁面,就是相應(yīng)Class文件執(zhí)行的結(jié)果

    2024年02月08日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包