Rumah >pembangunan bahagian belakang >Tutorial Python >Python belajar menganalisis prinsip operasi Flask (penjelasan terperinci dengan gambar dan teks)
Artikel ini membawakan anda pengetahuan yang berkaitan tentang python terutamanya isu yang berkaitan dengan prinsip operasi Flask dan membuat analisis ringkas tentang prinsip operasi Flask untuk meningkatkan pemahaman anda tentang Flask membantu semua orang.
Pembelajaran yang disyorkan: tutorial pembelajaran python
Semua rangka kerja web Python mesti mengikut protokol WSGI, jadi di sini kita masih perlu secara ringkas kaji semula Mari kita lihat konsep teras WSGI.
Terdapat konsep yang sangat penting dalam WSGI: setiap aplikasi web Python ialah objek yang boleh dipanggil. Dalam kelalang, objek ini ialah apl yang dicipta oleh app = Flask(nama), iaitu bahagian Aplikasi hijau dalam gambar di bawah. Untuk menjalankan aplikasi web, anda mesti mempunyai pelayan web, seperti apache, nginx, atau gunicorn yang biasa dalam python Kami akan bercakap tentang Pelayan WSGIS yang disediakan oleh werkzeug di bawah.
Cara berkomunikasi antara Pelayan dan Aplikasi adalah fungsi WSGI. Ia menentukan antara muka aplikasi(persekitaran, start_response). kod dan respons. Terdapat juga mesej ralat dalam pengepala.
Ciri aplikasi WSGI yang sangat penting ialah ia boleh bersarang. Dengan kata lain, anda boleh menulis aplikasi yang memanggil aplikasi lain dan kemudian kembali (serupa dengan proksi). Secara umumnya, lapisan terakhir sarang ialah aplikasi perniagaan, dan bahagian tengah ialah perisian tengah. Kelebihan ini ialah logik perniagaan dan fungsi lain seperti pengehadan semasa, pengesahan, bersiri, dan lain-lain boleh dipisahkan dan dilaksanakan ke dalam lapisan tengah yang berbeza dan logik perniagaan tidak berkaitan dan boleh dikekalkan secara bebas juga Lapisan tengah yang berbeza boleh digabungkan secara dinamik untuk memenuhi keperluan yang berbeza.
Flask adalah berdasarkan kotak alat Werkzeug WSGI dan enjin templat Jinja2. Flask dilesenkan di bawah lesen BSD. Flask juga dipanggil "kerangka mikro" kerana ia menggunakan teras ringkas dan menggunakan sambungan untuk menambah fungsi tambahan. Flask tidak mempunyai pangkalan data lalai atau alat pengesahan borang. Walau bagaimanapun, Flask mengekalkan fleksibiliti pengembangan dan anda boleh menggunakan sambungan Flask untuk menambah fungsi ini: ORM, alat pengesahan borang, muat naik fail dan pelbagai teknologi pengesahan terbuka. Kita boleh memahami bahawa Flask ialah teras, dan fungsi lain ialah beberapa pemalam Apa sahaja fungsi yang diperlukan, selagi pemalam yang sepadan ditemui dan dimasukkan ke dalam teras, fungsi itu boleh direalisasikan.
Cara Flask menukar kod kepada halaman web yang boleh dilihat. Pertama sekali, kita perlu melihat proses umum program Web Untuk aplikasi Web kami, apabila pelanggan ingin mendapatkan sumber dinamik (seperti laman web yang ditulis dalam bahasa seperti ASP dan PHP), ia akan memulakan. Permintaan HTTP (seperti menggunakan penyemak imbas untuk mengakses URL), pada masa ini aplikasi web akan melaksanakan pemprosesan perniagaan yang sepadan dalam latar belakang pelayan (seperti mengendalikan pangkalan data atau melakukan beberapa operasi pengiraan, dsb.), mengambil data keperluan pengguna, dan menjana respons HTTP Sepadan (sudah tentu, jika anda mengakses sumber statik, pelayan akan secara langsung mengembalikan sumber yang diperlukan oleh pengguna dan tidak akan melaksanakan pemprosesan perniagaan). Keseluruhan projek pemprosesan adalah seperti berikut:
Dalam aplikasi sebenar, permintaan yang berbeza mungkin memanggil logik pemprosesan yang sama. Permintaan HTTP dengan logik pemprosesan perniagaan yang sama boleh dikenal pasti dengan jenis URL. Sebagai contoh, dalam laman blog kami, semua permintaan untuk mendapatkan kandungan Artikel boleh diwakili oleh URL seperti artikel/id artikel di sini digunakan untuk membezakan artikel yang berbeza. Kemudian tentukan fungsi get_article(article_id) di latar belakang untuk mendapatkan data artikel yang sepadan Di samping itu, adalah perlu untuk mewujudkan surat-menyurat satu dengan satu antara URL dan fungsi. Ini adalah apa yang dipanggil pengedaran laluan dalam pembangunan Web, seperti yang ditunjukkan dalam rajah berikut:
Dalam Flask, werkzeug digunakan untuk pengedaran laluan ialah perpustakaan WSGI asas yang digunakan oleh Flask (WSGI, nama penuh antara muka Gerbang Pelayan Web, atau Antara Muka Gerbang Pelayan Web Python, ialah antara muka yang mudah dan biasa antara pelayan web dan aplikasi web yang ditakrifkan untuk bahasa Python).
WSGI membahagikan perkhidmatan web kepada dua bahagian: pelayan dan aplikasi. Pelayan WGSI hanya bertanggungjawab untuk dua perkara yang berkaitan dengan rangkaian: menerima permintaan HTTP penyemak imbas dan menghantar respons HTTP kepada penyemak imbas dan logik pemprosesan khusus permintaan HTTP dilakukan dengan memanggil aplikasi WSGI. Aliran kerja WSGI ditunjukkan dalam rajah di bawah:
Dalam Flask, kod pengedaran laluan adalah sangat mudah untuk ditulis, seperti berikut:
# 管理员注销页面 @main.route('/logout') def logout(): dm = DataManager() currentUsers = dm.getUsers('0') print(currentUsers[0]) return render_template('currentUsers.html', users=currentUsers)
Dapatkan apa yang kita perlukan melalui perniagaan fungsi logik Selepas menerima data, pelayan akan menjana respons HTTP berdasarkan data (untuk aplikasi web, ia biasanya fail HTML, yang boleh terus dibaca dan ditafsirkan oleh pelanggan kami, iaitu pelayar). Dalam pembangunan Web, amalan biasa ialah menghantar data yang diperolehi ke dalam fail templat HTML yang disediakan oleh aplikasi Web, dan selepas dipaparkan oleh sistem templat, akhirnya kami mendapat fail respons HTML yang kami perlukan.
Secara umumnya, walaupun permintaan berbeza, kaedah paparan data dalam respons adalah sama, kecuali data yang kami minta dan dapatkan, semua yang lain adalah sama, maka kami boleh mereka bentuk templat (Kecuali fakta bahawa kandungan data boleh diubah, selebihnya adalah fail HTML tetap). Kita ambil laman blog sebagai contoh Walaupun kandungan artikel khusus artikel berbeza berbeza, kandungan yang dipaparkan pada halaman adalah sama kecuali data yang diminta, termasuk blok tajuk, lajur kandungan, dll. Dalam erti kata lain, untuk artikel, kami hanya perlu menyediakan templat HTML dan kemudian menghantar data artikel yang berbeza untuk mendapatkan respons HTTP yang berbeza. Ini adalah apa yang dipanggil pemaparan templat, seperti yang ditunjukkan dalam rajah di bawah:
Gunakan enjin pemaparan templat Jinja2 dalam Flask untuk pemaparan templat (Jinja2 ialah enjin templat berdasarkan python, dan fungsinya serupa kepada PHP smarty , Penanda Percuma dan halaju J2ee Ia menyokong sepenuhnya unicode dan mempunyai persekitaran pelaksanaan kotak pasir bersepadu, dan digunakan secara meluas (jinja2 menggunakan kebenaran BSD). Aliran kerja Jinja2 ditunjukkan dalam rajah di bawah:
Dalam Flask, kod pemaparan templat juga sangat mudah untuk ditulis seperti berikut:
@app.route('/articles/<article_id>/') defget_article(article_id): returnrender_template('path/to/template.html', data_needed)</article_id>
Dalam Flask, kami Proses memproses permintaan adalah untuk menentukan terlebih dahulu fungsi logik perniagaan yang harus diproses berdasarkan URL yang diserahkan oleh pengguna, dan kemudian melakukan operasi dalam fungsi untuk mendapatkan data yang diperlukan. Data yang diperoleh kemudian dihantar ke fail templat yang sepadan, dan Jinja2 bertanggungjawab untuk memberikan kandungan respons HTTP, iaitu fail HTML respons HTTP, dan kemudian Flask mengembalikan kandungan respons.
Yang berikut terutamanya menggunakan contoh projek untuk menganalisis secara ringkas prinsip operasi Flask. Dalam projek contoh, fungsi kilang program dan pelan tindakan digunakan. Struktur direktori projek adalah seperti berikut:
Dalam fail manager.py, fungsi kemasukan untuk permulaan projek ditakrifkan:
# 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。 if __name__ == '__main__': # 启用cmd命令行 # manager.run() app.run(host='0.0.0.0', port=9000, debug=True)
同时,在该文件中创建了工厂方法实例:
app = create_app()
在工程方法中,对数据库进行了相关配置,创建了前端导航栏,同时对所创建的蓝本进行了注册。在创建的蓝本中主要涉及授权、路由及错误处理模块。
# 构造工厂方法 def create_app(): # 在这里__name__ == __main__ app = Flask(__name__) app.url_map.converters['regex'] = RegexConverter # 防止跨站攻击 注:为了增强安全性,密钥不应直接写入代码,而应该保存在环境变量中 # app.config['SECRET_KEY'] = 'hard to guess string SUNNY2017' # app.secret_key = 'Sunny123456' # flask提供的读取外部文件 app.config.from_pyfile('config') # basedir = os.path.abspath(os.path.dirname(__file__)) # print(basedir) # 配置数据库连接 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://lmapp:lmapp@localhost/smp' app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True nav.register_element('top', Navbar(u'APP安盾', View(u'当前在线', 'main.index'), View(u'全部用户', 'main.all_users'), View(u'注销', 'main.logout'), View(u'修改密码', 'main.chgpwd'), )) nav.init_app(app) db.init_app(app) bootstrap.init_app(app) # init_views(app) from .auth import auth as auth_blueprint from .main import main as main_blueprint # 注册蓝本 url_prefix='/auth' app.register_blueprint(auth_blueprint,) app.register_blueprint(main_blueprint, static_folder='static') return app
推荐学习:python教程
Atas ialah kandungan terperinci Python belajar menganalisis prinsip operasi Flask (penjelasan terperinci dengan gambar dan teks). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!