بىلىملەر مۇنبىرى

 پارول قايتۇرىۋېلىش
 تىزىملىتىڭ

تېلفۇن نومۇردا كىرىش

جەمئىي مىكروبلوگ 158 تال  

مىكروبلوگ[ يېڭى | 24 سائەت | 7 كۈن | 30 كۈن ]

كۆرۈش: 715|ئىنكاس: 2

[Python] Python نىڭ Flask رامكىسىنى ئىشلىتىش ئۇسۇلى

[ئۇلانما كۆچۈرۈش]

بىكەتكە ئەزا نامىڭىز بىلەن كىرسىڭىز تېخىمۇ كۆپ ئۇچۇرلارنى كۆرەلەيسىز

مۇنبىرىمىزگە تىزىملىتىپ كىرسىڭىز ئاندىن قوشۇمچە ھۆججەتنى كۆرەلەيسىز ياكى چۈشۈرەلەيسىز . تېخى تىزىملاتمىغانمۇ؟ تىزىملىتىڭ

x
Flask بولسا Python دىكى تور بىكەت ئېچىش رامكىسى بولۇپ، بىز Python تىلىدىن پايدىلىنىپ تۈز سۈرئەتتە تۈرلۈك تور بىكەت مۇلازىمىتىرىنى قۇراپ چىقالايمىز.

1. Flask نى قاچىلاش

  1. pip install flask
مەزمۇننى كۆچۈرۈۋېلىش

2. مۇندەرىجە تۈزۈلىشى

  1. flask-demo/
  2.   ├ run.py           # قوزغىتىش پروگراممىسى
  3.   ├ config.py        # تەڭشەك
  4.   ├ requirements.txt # پروگراممىغا ئىشلەتكەن python ئامبارلار تىزىملىكى
  5.   ├ tests/           # كود سىناش بوغچىسى
  6.   │   ├ __init__.py
  7.   │   └ test_*.py    # كود سىناش
  8.   └ myapp/
  9.       ├ admin/       # باشقۇرۇش
  10.       ├ static/
  11.       │   ├ css/     # css ھۆججەت مۇندەرىجىسى
  12.       │   ├ img/     # رەسىم ھۆججەت مۇندەرىجىسى
  13.       │   └ js/      # js ھۆججەت مۇندەرىجىسى
  14.       ├ templates/   # قېلىپ مۇندەرىجىسى
  15.       ├ __init__.py   
  16.       ├ forms.py     # باھارلىق جەدۋەللەر ساقلىنىدۇ
  17.       ├ models.py    # باھارلىق مودېللار ساقلىنىدۇ
  18.       └ views.py     # باھارلىق كۆرۈنمە چاستوت ساقلىنىدۇ
مەزمۇننى كۆچۈرۈۋېلىش

3. Hello World نى ئىجرا قىلىش

ئاددى مىسال
  1. from flask import Flask
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def index():
  5.     return 'Hello World'
  6. if __name__ == '__main__':
  7.     app.debug = True # تەڭشەك ھالىتى، پروگرامما رەسمى ئېلان قىلغاندا ئىتىپ قويساق بولىدۇ
  8.     app.run()
مەزمۇننى كۆچۈرۈۋېلىش

بۇ بولسا flask ئامباردىن پايدىلىنىپ ياسالغان كىچىك پروگرامما. python ئارقىلىق قوزغاتقاندىن كىيىن localhost:5000 تور ئادىرىسى ئارقىلىق پروگراممىنى زىيارەتقىلغاندا تور بىكەت يۈزىدە Hello world دىگەن ئۇچۇرنى كۆرەلەيمىز.
يوقاردا ئەڭ ئاۋال Flask تۈرنى چاقىرىپ ئىشلەتتۇق، ئاندىن بىر تۈرگە بىر مىسالنى قۇردۇق، name بولسا بۇ مودىلنىڭ نامى. بۇ مودىل بىۋاستە ئىجرا بولىدىغانلىقى ئۈچۈن name نىڭ قىممىتى main بولدى. ئاندىن ئېنىقلىغۇچى route() نى ئىشلىتىپ ئادىرىسىغا ئېنىقلىما بىرىش ئارقىلىق، flask نىڭ قانداق قىلىپ بۇ فونكىسىيەنى ئىجرا قىلىدىغانلىقى كۆرسىتىپ بەردۇق. ئەڭ ئاخىرىدا run() فونكىسىيىسى ئارقىلىق مەزكۇر پروگراممىنى ئىجرا قىلدۇق.

4. قېلىپ

Flask نىڭ قېلىپ ئىقتىدارى Jinja2 قېلىپ ئاساسىدا ئەمەلگە ئاشۇرۇلغان. تۆۋەندە بىز بىر مىسال كۆرۈپ چىقايلى. بىر Flask ئىجرا بولۇش ھۆججىتى قۇرۇپ چىقايلى (قانداق يېزىشنى ئۇنتۇپ قالمىغانسىز)، كودى:
  1. from  flask import  Flask
  2. from  flask import  render_template
  3. app  =  Flask(__name__)
  4. @app.route('/hello')
  5. @app.route('/hello/<name>')
  6. def  hello(name=None):
  7.     return  render_template('hello.html',  name=name)
  8. if  __name__  ==  '__main__':
  9.     app.run(host='0.0.0.0',  debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

يوقارقى كودتتىكى hello() فونكىيىسى بىۋاستە ھەرپ-بەلگە قايتۇرماستىن، render_template() ئۇسۇلىنى ئىشلىتىپ تۇرۇپ قېلىپ ھۆججىتىنى تارتىپ ئىشلىتىدۇ. بۇ ئۇسۇلدىكى بىرىنجى پارامېتىر hello.html بولسا سىزنىڭ ئىشلەتمەكچى بولغان قېلىپ ھۆجىتىڭىزنىڭ ئىسمى، ئىككىنچى پارامېتىردىكى name بولسا قېلىپ ھۆججەتكە يوللاپ بەرگەن ئۆزگەرگۈچى مىقدار، كۆپ ئۆزگەرگۈچى مىقتار يوللاپ بىرىشكىمۇ بولىدۇ.
ئۇنداق بولسا بۇ قېلىپ ھۆججەت hello.html نىڭ ساقلانغان ئورنى نەدە، ئۆزگەرگۈچى مىقدارنى قانداق ئىشلىتىمىز؟ تۆۋەندە بىز قېلىپ ھۆججىتىنى قۇرۇپ كۆرەيلى. پروگرامما بار ھۆججەت مۇندەرىجىسىنىڭ ئىچىگە templates بولغان مۇندەرىجىدىن بىرنى قۇرىمىز(دىققەت، ئىسمى چوقۇم مۇشۇنداق بولسۇن)، ئاندىن templates مۇندەرىجىسى ئىچىگە hello.html دەپ بىر قېلىپ ھۆججىتى قۇرىمىز. كودى تۆۋەندىكىدەك:
  1. <!doctype html>
  2. <title>Hello Sample</title>
  3. {% if name %}
  4.   <h1>Hello {{ name }}!</h1>
  5. {% else %}
  6.   <h1>Hello World!</h1>
  7. {%  endif  %}
مەزمۇننى كۆچۈرۈۋېلىش

يوقارقى كود HTML كودىغا بەكلا ئوخشاش تۇرامدۇ قانداق؟ HTML ياكى باشقا قېلىپ ھۆججەت كودلىرى بىلەن ئۇچۇرشۇپ باققان دوستلىرىمىز بولسا، يوقارقى كودنى بىر قاراپلا چۈشىنەلەيدۇ. يوقارقىسى بولسا HTML قېلىپ، name ناملىق ئۆزگەرگۈچى مىقدارنىڭ قىمىتىگە ئاساسەن ئوخشىمىغان مەزمۇنلارنى كۆرسىتىدۇ. ئۆزگەرگۈچى مىقدار ياكى ئىپادىلەش شەكلى {{ }} ئارقىلىق ئورۇلۇپ تۇرىدۇ، ھالبۇكى كونتىرول جۈملىلىرى {% %} ئورۇلىدۇ، باشقا كودلارنىڭ ھەممىسى بىز دائىم ئۇچۇرتۇپ تۇرىدىغان HTML كودلىرىدۇ.
ئەمدى بىز تور كۆرگۈچتە http://localhost:5000/hello/man ئادىرىسىنى ئېچىپ كۆرۈپ باقايلى، بەت يۈزىدە Hello man! دىگەن خەنتى كۆرەلەيسىز. بىز يەنە مۇشۇ بەنىڭ ئەسلى كودىنى كۆرۈپ باقايلى.
  1. <!doctype html>
  2. <title>Hello from Flask</title>
  3.   <h1>Hello man!</h1>
مەزمۇننى كۆچۈرۈۋېلىش

دەرۋەقە، قېلىپ كودى Hello {{ name }}! نى ئىجرا قىلدى، يەنە كېلىپ ئۆزگەرگۈچى مىقدار {{ name }} قىممىتى man ئالماشتۇرۇلدى. Jinja2 يەنە نۇرغۇنلىغان ئىقتىدارلارنى ئۆزىگە مۇجەسسەملىگەن بولۇپ، for ئايلاندۇرۇش، سۈزگۈچ قاتارلىقلارمۇ بار.يەنە تېخى قېلىپنىڭ ئىچىدە بىۋاستە ئىچكى ئىچكى ئوبيېكتلارنىمۇ زىيارەت قىلىشقا بولىدۇ، مەسلەن request، session دىگەندەك. Jinja2 ھەققىدە ئېخىمۇ تەپسىلى تەپسىلارلارنى ئوقۇرمەنلەر ئۆزەڭلار ئىزدەپ باقساڭلار بولىدۇ.

5. قېلىپقا ۋارىسلىق قىلىش

ئادەتتە تور بىكەتلەردە بەت بىر قەدەر كۆپ بولۇپ، بىر قىسىم بەتلەرنى تەكرار ئىشلىتىشكە توغرا كېلىدۇ، مەسلەن تور بىكەت ئۈستى قىسمى، بىكەت ئاستى قىسمى، يول باشلاش تىزىملىكى قاتارلىقلار. ھەر بىر بەتكە ئوخشاش يوقارقى قىسىمنى قايتا كود يېزىش بەك ئاۋارچىلىق. Flask گە Jinja2 ئىشلىتىلگەنلىكى ئۈچۈن قېلىپقا ۋارىسلىق قىلىش ئىقتىدارى بار بولۇپ، نۇرغۇنلىغان قايتىلانغان كودلارنى يېزىشتىن خالى بولىمىز. تۆۋەندە بىز بىر مىسال كۆرۈپ باقايلى، templates مۇندەرىجىسى ئىچىگە layout.html دەپ بىر قېلىپ قۇرۇيلى:
  1. <!doctype html>
  2. <title>Hello Sample</title>
  3. <link rel="stylesheet"  type="text/css"  href="{{ url_for('static', filename='style.css') }}">
  4. <div class="page">
  5.     {% block body %}
  6.     {% endblock %}
  7. </div>
مەزمۇننى كۆچۈرۈۋېلىش

ئەمدى دەسلەپتە بىز يېزىپ تەييارلىۋالغان hello.html غا ئۆزگەرتىش كىرگۈزەيلى، ئەسلىدە بار بولغان كودلارنىڭ lock  body نىڭ ئىچىدە ئېنىقلىۋېتىپ، ئەڭ ئۈستىگە layout.htm نى ۋارسلىق قىلدۇرايلى.
  1. {%  extends  "layout.html"  %}
  2. {%  block  body  %}
  3. {%  if  name  %}
  4.   <h1>Hello {{ name }}!</h1>
  5. {% else %}
  6.   <h1>Hello World!</h1>
  7. {%  endif  %}
  8. {%  endblock  %}
مەزمۇننى كۆچۈرۈۋېلىش

ئەمدى تور كۆرگۈچتە http://localhost:5000/hello/man نى ئېچىپ بەتنىڭ ئەسلى كودىنى كۆرۈپ باقايلى.
  1. <!doctype html>
  2. <title>Hello Sample</title>
  3. <link rel="stylesheet"  type="text/css"  href="/static/style.css">
  4. <div class="page">
  5.   <h1>Hello man!</h1>
  6. </div>
مەزمۇننى كۆچۈرۈۋېلىش

يوقارقى ئۈنۈمدىن شۇنى كۆرىۋېلىشقا بولىدىكى، render_template() پەقەت hello.html قېلىپنىلا يۈكلىگەن بولسىمۇ، لىكىن layout.html دىكى مەزمۇنلارنىمۇ قوشۇپ يۈكلىدى. ئۇنىڭ ئۈستىگە hello.html دىكى مەزمۇنلار layout.html دىكى {% block body %} نىڭ ئۈستىگە قويۇلدى. دىمەك، hello.html بولسا layout.html نى ۋارسلىق قىلىپ ئىشلەتتى.

6. HTML دىكى ئاپتۇماتىك ئۆزگىرىش

بىز ئاۋال تۆۋەندىكى كودنى كۆرۈپ چىقايلى:
  1. @app.route('/')
  2. def  index():
  3.     return  '<div>Hello %s</div>'  %  '<em>Flask</em>'
مەزمۇننى كۆچۈرۈۋېلىش

بەتنى ئىجرا قىلىپ Hello Flask دىگەن خەتنى بايقايمىز، بۇنىڭ ئىچىدىكى Flask يانتو يېزىلغان، چۈنكى بىز Flask غا em خەتكۈچنى قوشۇپ قويدۇق. لىكىن بەزى چاغلاردا بىز HTML نىڭ ئىچىدە خەتكۈچلەرنى ئاپتۇماتىك ئۆزگەرتىپ ئىشلەتمەيمىز، بۇلۇپمۇ مۇلازىمىتېرغا قىممەت يوللىغاندا ئاسانلا يۇچۇق قالدۇرۇپ قويۇش كېلىپ چىقىدۇ. بىز يوقارقى كودنى ئازىراق ئۆزگەرتىپ چىقايلى، Markup تۈرنى چاقىرىپ ئىشلىتەيلى.
  1. from  flask import  Flask,  Markup
  2. app  =  Flask(__name__)
  3. @app.route('/')
  4. def  index():
  5.     return  Markup('<div>Hello %s</div>')  %  '<em>Flask</em>'
مەزمۇننى كۆچۈرۈۋېلىش

بەتنى قايتا ئاچايلى، ئەمدى em بەت يۈزىدە كۆرۈندى. Markup يەنە نۇرغۇنلىرىغان ئۇسۇلىرى بار، مەسلەن escape() ئارقىلىق HTML خەتكۈچنى چىقارغىلى، striptags() ئارقىلىق HTML خەتكۈچنى چىقىرۋاتقىلى بولىدۇ.

7. Request ئوبېيكت

  1. from flask import Flask,url_for,request,render_template

  2. @app.route('/login', methods=['POST', 'GET'])
  3. def login():
  4.     if request.method == 'POST':
  5.         if request.form['user'] == 'admin':
  6.             return 'Admin login successfully!'
  7.         else:
  8.             return 'No such user!'
  9.     title = request.args.get('title', 'Default')
  10.     return render_template('login.html', title=title)
  11. if __name__ == "__main__":
  12.     app.run(debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

يوقارقى كودتا request دىكى method ئۆزگەرگۈچى مىقتار نۆۋەتتىكى تور ئىلتىماسىنى قۇبۇل قىلىش ئۈچۈن ئىشلىتىدىغان ئۇسۇل بولۇپ، GET، POST، DELETE، PUT قاتارلىقلارنى ئۆز ئىچىگە ئالىدۇ. form ئۆزگەرگۈچى مىقتار بولسا بىر لۇغەت، POST دىن كەلگەن جەھۋەل ئۇچۇرلىرىغا ئېرىشكىلى بولىدۇ، يوقارقى مىسالدا، ئەگەر يوللانغان جەدۋەلدە user تۈرى يوق بولسا، KeyError قايتۇرىدۇ، ئەگەر سىز ئۇچۇرنى تۇتمىسىڭىز تور بىكەت سىزگە 404 خاتالىق قايتۇرىدۇ. ھالبۇكى request.args.get() ئارقىلىق سىز Get تەلەپ ئارقىلىق URL دىكى پارامېتىرلارغا ئېرىشەلەيسىز، يوقارقى فونكىسىيەدىكى ئىككىنچى پارامېتېر بولسا كۆڭۈلدىكى قىممەت، URL دا پارامېتىر يوق بولغان ۋاقىتتا، كۆڭۈلدىكى قىممەتنى قايتۇرىدۇ.
templates مۇندەرىجىسىنىڭ ئىچىگە layout.html نى قۇرۇڭ.
  1. <!doctype html>
  2. <title>Hello Sample</title>
  3. <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
  4. <div class="page">
  5.     {% block body %}
  6.     {% endblock %}
  7. </div>
مەزمۇننى كۆچۈرۈۋېلىش

login.html قۇرۇڭ.
  1. {% extends "layout.html" %}
  2. {% block body %}
  3. <form name="login" action="/login" method="post">
  4.     Hello {{ title }}, please login by:
  5.     <input type="text" name="user" />
  6. </form>
  7. {% endblock %}
مەزمۇننى كۆچۈرۈۋېلىش

微信截图_20190824195924.png
微信截图_20190824195941.png

8. session

session ئارقىلىق نۆۋەتتىكى ئىلتىماسنىڭ ھالىتىنى خاتىرلىگىلى بولىدۇ.
  1. from flask import Flask,url_for,request,render_template,redirect,session
  2. @app.route('/login', methods=['POST', 'GET'])
  3. def login():
  4.     if request.method == 'POST':
  5.         if request.form['user'] == 'admin':
  6.             session['user'] = request.form['user']
  7.             return 'Admin login successfully!'
  8.         else:
  9.             return 'No such user!'
  10.     if 'user' in session:
  11.         return 'Hello %s!' % session['user']
  12.     else:
  13.         title = request.args.get('title', 'Default')
  14.         return render_template('login.html', title=title)
  15. @app.route('/logout')
  16. def logout():
  17.     session.pop('user', None)
  18.     return redirect(url_for('login'))

  19. app.secret_key = '123456'
  20. if __name__ == "__main__":
  21.     app.run(debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

يوقارقى كودنى ئىجرا قىلىپ شۇنى بايقايسىز، admin ئارقىلىق بىكەتكە كىرگەندىن كىيىن، login بەتنى قايتا ئاچسىڭىز ئۇچۇر يوللايدىغان جەدۋالنى بايقىمايسىز. ئاندىن logout ئارقىلىق چىكىنىپ چىقالايسىز. session ئوبيېكتنىڭ مەشخۇلاتى خۇددى بىر لوغەت بىلەن ئوخشاش. بۇ يەردە ئالاھىدە ئەسكەرتىدىغىنىم session ئىشلەتكەندە چوقۇم بىر app.secret_key ئاچقۇچ بىكىتىشىمىز كىرەك، مەسلەن ئۈستىدىكى مىسال كودتەك. بولمىسا RuntimeError: the session is unavailable because no secret key was set قوزغاتقاندا خاتالىق كۆرۈلىدۇ. ئاچقۇچ قانچە مۇرەككەپ بولسا شۇنچە ياخشى، ئەڭ ياخشىسى تەرتىپسىز ھاسىللانغان سانلارنى ئىشلەتسىڭىز بولىدۇ، بۇنداق بولغاندا تەكرارلىنىپ قېلىشنىڭ ئالدىنى ئالالايسىز.

9. ئىنكاس قۇرۇش

يوقارقى مىساللاردا، بىز ئاساسەن ئىلتىماسقا ئاساسەن بىۋاستە ھەرپ-بەلگە مەزمۇنلىرىنى قايتۇرغان ياكى قېلىپ ئارقىلىق مۇناسىۋەتلىك مەزمۇنلارنى قايتۇردۇق. ئەمەلىيەتتە بىز ئىنكاس ئوبيېكت قۇرۇش ئارقىلىق، بىر قىسىم پارامېتىرلارنى بىكىتىۋېلىپ، پارامېتىرغا ئاساسەن ئۇچۇر قايتۇرساقمۇ بولىدۇ. تۆۋەندە بىز يوقارقى كودنىڭ Get تەلەپ يوللاش قىسمىنى ئازىراق ئۆزگەرتىلى.
  1. from flask import Flask,url_for,request,render_template,redirect,session,make_response

  2. @app.route('/login', methods=['POST', 'GET'])
  3. def login():
  4.     if request.method == 'POST':
  5.         ...
  6.     if 'user' in session:
  7.         ...
  8.     else:
  9.         title = request.args.get('title', 'Default')
  10.         response = make_response(render_template('login.html', title=title), 200)
  11.         response.headers['key'] = 'value'
  12.         return response
  13. if __name__ == "__main__":
  14.     app.run(debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

تور كۆرگۈچنىڭ تەڭشەشنى ئېچىپ، ئەزا كىرمىگەن ھالەتتە Get تەلەپ يوللاپ بېقىڭ، بۇ ۋاقىتتا key دەپ بىر تۈرنىڭ بارلىقىنى بايقايسىز. make_response ئۇسۇل دەل response ئوبيېكت قۇرۇش ئۈچۈن ئىشلىتىلگەن. ئىككىنچى پارامېتىردىكىسى بولسا ئىنكاس ھالەت كودى، بۇ يەردە 200 ئەسكەرتمىسىنى قىسقارتىپ بەرگەن.
WX20190825-003509@2x.png

10. Cookie نىڭ ئىشلىتىلىشى

بۇ يەردە Session نى تىلغا ئالغانكەنمىز، Cookie دىنمۇ ئانچە-مۇنچە سۆز قىلمىساق بولماس. Flask دە Cookie ئىشلىتىشمۇ ناھايىتى قولاي.
  1. from flask import Flask,url_for,request,render_template,redirect,session,make_response
  2. import time
  3. @app.route('/login', methods=['POST', 'GET'])
  4. def login():
  5.     response = None
  6.     if request.method == 'POST':
  7.         if request.form['user'] == 'admin':
  8.             session['user'] = request.form['user']
  9.             response = make_response('Admin login successfully!')
  10.             response.set_cookie('login_time', time.strftime('%Y-%m-%d %H:%M:%S'))
  11.         ...

  12.     else:
  13.         if 'user' in session:
  14.             login_time = request.cookies.get('login_time')
  15.             response = make_response('Hello %s, you logged in on %s' % (session['user'], login_time))
  16.         ...

  17.     return response
  18. app.secret_key = '123456'
  19. if __name__ == "__main__":
  20.     app.run(debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

بۇ قېتىم بىز time مودىل ئارقىلىق سېستىمىنىڭ ھازىرقى ۋاقتىغا ئېرىشتۇق. بىز ئىنكاس قايتۇرغان ۋاقىتتا response.set_cookie() فونكىسىيىسى ئارقىلىق Cookie تۈرى بىكىتتۇق، ئاندىن بۇ تۈرنىڭ قىممىتى تور كۆرگۈچتە ساقلىۋالدۇق. بۇ فونكىسىيىنىڭ ئۈچىنچى پارامېتىرى max_age دا Cookie نىڭ كۈچكە ئىگە ۋاقتىنى تەڭشىۋالدۇق، بىرلىكى سكونت، ئەگەر بىكىتمىسەك، تور كۆرگۈچنى تاقىغان ھامان Cookie تۈرمۇ كۈچىدىن قالىدۇ.
ئىلتىماستا، request.cookies ئوبيېكت بولسا تور كۆرگۈچ Cookie نىڭ لوغىتىدۇر، get() فونكىسىيىسىنى ئىشلىتىش ئارقىلىق مۇناسىۋەتلىك قىممەتكە ئېرىشكىلى بولىدۇ.
WX20190825-004210@2x.png

11. خاتالىق بىر تەرەپ قىلىش

abort() فونكىسىيىسىنى ئىشلىتىش ئارقىلىق بىۋاستە ئىلتىماستىن چىكىنىپ چىقىپ، خاتالىق كودى قايتۇرۇئىدۇ.
  1. from flask import Flask,abort

  2. app = Flask(__name__)
  3. @app.route('/error')
  4. def error():
  5.     abort(404)

  6. if __name__ == "__main__":
  7.     app.run(debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

يوقارقى مىسال كودتتىن تور كۆرگۈچتە 404 خاتالىق بەت كۆرۈنىدۇ. بەزى ۋاقىتلاردا، ئالاھىدە خاتالىق كودى كۆرۈلگەندە بىر قىسىم ئىشلارنى قىلىشنى ئويلىشىپ قالىمىز، ياكى خاتالىق كۆرسەتمە بېتىنى قايتىدىن يېزىپ چىقىشنى ئويلايمىز، شۇ ۋاقىتلاردا تۆۋەندىكى ئۇسۇلنى ئىشلەتسىڭىز بولىدۇ.
  1. from flask import Flask,abort

  2. app = Flask(__name__)

  3. @app.errorhandler(404)
  4. def page_not_found(error):
  5.     return render_template('404.html'), 404
  6. if __name__ == "__main__":
  7.     app.run(debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

WX20190825-004717@2x.png
ئادەتتە ئەمەلىي ئېچىش جەريانىدا abort() دا چىكىنىشنى كۆپ ئىشلىتىپ كەتمەيمىز، ئاساسەن خاتالىقنى تۇتۇش ياكى نەزەردىن ساقىت قىلىش كۆپرەك ئىشلىتىلىدۇ. @app.errorhandler() نىڭ خاتالىق كودىنى تىزملىتىشتىن باشقا يەنە بەلگىلەنگەن خاتالىق تۈرىنى تىزىملاش ئىقتىدارىمۇ بار. تۆۋەندە بىز بىر مىسال كۆرۈپ چىقايلى:
  1. class InvalidUsage(Exception):
  2.     status_code = 400

  3.     def __init__(self, message, status_code=400):
  4.         Exception.__init__(self)
  5.         self.message = message
  6.         self.status_code = status_code


  7. @app.errorhandler(InvalidUsage)
  8. def invalid_usage(error):
  9.     response = make_response(error.message)
  10.     response.status_code = error.status_code
  11.     return response
  12. @app.route('/exception')
  13. def exception():
  14.     raise InvalidUsage('No privilege to access the resource', status_code=403)
  15. if __name__ == "__main__":
  16.     app.run(debug=True)
مەزمۇننى كۆچۈرۈۋېلىش

TIM截图20190825110905.png
بىز ئۈستىدىكى كودتا بىر نورمالسىزلىق InvalidUsage نى ئېنىقلىدۇق،  شۇنىڭ بىلەن بىر ۋاقىتتا بىز @app.errorhandler() نى invalid_usage() فونكىسىيىسى قىلىپ ياسىۋالدۇق. پەقەت InvalidUsage دا خاتالىق كۆرۈلسىلا  invalid_usage() فونكىسىيىسىنى تارتىپ ئىشلىتىدۇ.

12. url يۆلىنىش بەلگىلەش

Flask نىڭ URL قائىدىسى Werkzeug نىڭ يول باشلاش مودېلى ئاساسىدا تۈزۈلگەن. مودېلنىڭ ئىدىيىسى ئاساسلىقى Apache ۋە ئۇنىڭدىن بۇرۇنقى HTTP مۇلازىمىتېرىنى قاتارلىقلار ئاساسىدا ئەلالاشتۇرۇلغان.
  1. @app.route('/projects/')
  2. def projects():
  3.     return 'The project page'

  4. @app.route('/about')
  5. def about():
  6.     return 'The about page'
مەزمۇننى كۆچۈرۈۋېلىش

بىرىنجى يول باشلاشنى زىيارەت قىلغان ۋاقىتتا / نى ئېلىۋېتىپ قالساق، Flask ئاپتۇماتىك ھالدا توغرا بولغان ئادىرىسقا يۆلىنىش بەلگىلەيدۇ.
ئىككىنچى يول باشلاشنى زىيارەت قىلغان ۋاقىتتا ئەگەر ئاخىرىدىكى / نى ئېلىۋەتسەك، Flask بىۋاستە 404 NOT FOUND خاتالىق ئەسكەرتمىسى چىقىرىدۇ.

يۆلىنىش بەلگىلەش فونكىسىيىسى redirect() يوقارقى كودتا كۆرۈلدى. ئاساسلىق رولى زىيارەت قىلغۇچى مەلۇم بىر ئادىرىسىنى ئاشقان ۋاقىتتا، ئىچكى قىسىمدا باشقا بىر ئادىرىسقا يول باشلايدۇ. مەسلەن، ئەزا بىكەتكە كىرمىگەن ۋاقىتتا سېستىما بىۋاستە بىكەتكە كىرىش بېتىغا باشلايدۇ دىگەندەك.
  1. from flask import session, redirect

  2. @app.route('/')
  3. def index():
  4.     if 'user' in session:
  5.         return 'Hello %s!' % session['user']
  6.     else:
  7.         return redirect(url_for('login'), 302)
مەزمۇننى كۆچۈرۈۋېلىش

redirect() نىڭ ئىككىنچى پارامېتىردىكى HTTP ھالەت كودى 301، 302، 303، 305 ۋە 307 لارنى ئۆز ئىچىگە ئالىدۇ، سۈكۈتتىكى كود 302 بولىدۇ. بۇلارنىڭ ئىچىدە نىمە ئۈچۈن 304 يوق؟ بۇ يازما كۆرۈرمەنلىرىگە سۇئال قالدى. جاۋابىنى ئىنكاس ئارقىلىق قالدۇرۇڭ.

باھالاش

قاتناشقانلار سانى 1تىللا +15 يىغىش سەۋەبى
TARQAT + 15 ئالامەت!

باھا خاتىرىسى

مۇناسىۋەتلىك تېمىلار

بىلمىگەننى بىلىملەردىن بىل!
ۋاقتى: 2019-9-12 16:19:05 يانفوندا يوللانغان | ھەممە قەۋەتنى كۆرۈش
ياخشىمۇسىز ئادمىن    تىمىڭىزنى  كۈرۈپ بەك خوش بولدۇم مەنمۇ مۇشۇ مەزمۇننى ئۈگنىۋاتقانتىم بولسا ئالاقىلشىش ئۇسۇلىڭىزنى دەپ بەرسىڭىز يولڭققان مەسلىنى سىزدىن  سوراپ ئۈگەنسەم  دىگەن ئۈمبتتە

باھا سۆز

ياخشىمۇ سىز. 597154595  تەپسىلاتى ئىنكاس ۋاقتى: 2019-9-12 18:46
بىلمىگەننى بىلىملەردىن بىل!
 ئىگىسى| ۋاقتى: 2019-9-12 18:46:30 | ھەممە قەۋەتنى كۆرۈش
namsiz00 يوللىغان ۋاقتى  2019-9-12 16:19
ياخشىمۇسىز ئادمىن    تىمىڭىزنى  كۈرۈپ بەك خوش بولدۇم مە ...

ياخشىمۇ سىز. 597154595
بىلمىگەننى بىلىملەردىن بىل!
كىرگەندىن كېيىن ئىنكاس يازالايسىز كىرىش | تىزىملىتىڭ

سەھىپە جۇغلانما قائىدىسى

QQ|قاماقخانا|رەسىمسىز ھالەت|يانفۇن|بىلىملەر تورى ( 冀ICP备14002886号-3 

GMT+8, 2019-10-18 17:40 , Processed in 0.192929 second(s), 38 queries .

Powered by Discuz! X3.2(NurQut Team)

© 2001-2013 Comsenz Inc.

تېز ئىنكاس چوققىغا قايتىش سەھىپىگە قايتىش