±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚsegmentfault£¬Ö÷Òª½éÉÜÁË»ùÓÚµ÷¶È·½·¨µÄÊÓͼ£¬ÀàÊÓͼÉÏÃæÊ¹ÓÃ×°ÊÎÆ÷ÒÔ¼°À¶Í¼µÈÏà¹ØÄÚÈÝ¡£ |
|
ÊÓͼ¸ß¼¶
app.routeºÍapp.add_url_rule
app.add_url_rule
app.add_url_rule('/list/',endpoint='myweb'
,view_func=my_list) |
Õâ¸ö·½·¨ÊÇÓÃÀ´Ìí¼ÓurlÓëÊÓͼº¯ÊýµÄÓ³Éä¡£Èç¹ûûÓÐÌîдendpointÄÇô»áĬÈÏʹÓÃview_funcµÄÃû×ÖÀ´×÷Ϊendpoint¡£
Òò´ËÔÚʹÓÃurl_forµÄʱºò£¬¾ÍÒª¿´ÔÚÓ³ÉäµÄʱºòÓÐûÓд«µÝendpoint²ÎÊý£¬Èç¹û´«µÝÁË£¬ÄÇô¾ÍʹÓÃendpointÖ¸¶¨µÄ×Ö·û´®¡£
¸¶¹ýûÓÐʹÓõϰ¾ÍʹÓÃview_func¶¨ÒåµÄÃû×Ö¡£
app.route(rule,**options)×°ÊÎÆ÷
Õâ¸ö×°ÊÎÆ÷µÄµ×²ã¾ÍÊÇÓÃadd_url_ruleÀ´ÊµÏÖurlÓëÊÓͼº¯ÊýÓ³ÉäµÄ¡£
СÀý×ÓÈçÏ£º
from flask import
Flask,url_for
app = Flask(__name__)
app.config.update({
'DEBUG':True,
'TEMPLATES_AUTO_RELOAD':True
})
@app.route('/',endpoint='index')
def hello_world():
print(url_for('myweb'))
return 'Hello World!'
def my_list():
return 'list page!'
app.add_url_rule('/list/',endpoint='myweb' ,view_func=my_list)
#ÇëÇóÉÏÏÂÎĵ͍Ò壬½áºÏurl_for
with app.test_request_context():
print(url_for('index'))
if __name__ == '__main__':
app.run() |
ÀàÊÓͼ
֮ǰÎÒÃǽӴ¥µÄÊÓͼ¶¼ÊǺ¯Êý£¬ËùÒÔÒ»°ã¼ò³ÆÊÓͼº¯Êý¡£
ÆäʵÊÓͼҲ¿ÉÒÔ»ùÓÚÀàÀ´ÊµÏÖ£¬ÀàÊÓͼµÄºÃ´¦ÊÇÖ§³Ö¼Ì³Ð£¬µ«ÊÇÀàÊÓͼ²»Äܸúº¯ÊýÊÓͼһÑù£¬
дÍêÀàÊÓͼ»¹ÐèҪͨ¹ýapp.add_url_rule(url_rule,view_func)À´½øÐÐ×¢²á¡£ÒÔϽ«¶ÔÁ½ÖÖÀàÊÓͼ½øÐн²½â
±ê×¼ÊÓͼ
±ê×¼ÀàÊÓͼ±ØÐë¼Ì³Ð×Ôflask.views.View
±ØÐëʵÏÖdispatch_request·½·¨£¬ÒÔºóÇëÇó¹ýÀ´ÒԺ󣬻áÖ´ÐÐÕâ¸ö·½·¨¡£Õâ¸ö·½·¨µÄ·µ»ØÖµ¾ÍÏ൱ÓÚÊÇ֮ǰµÄº¯ÊýÊÓͼһÑù£¬Ò²±ØÐë·µ»ØRequest»òÕß×ÓÀàµÄ¶ÔÏó£¨×Ö·û´®»òÕßÔª×飩¡£
±ØÐëÊÇͨ¹ýapp.add_url_rule(rule,endpoint,view_func)À´×öurlÓ³Éä¡£
view_funcÕâ¸ö²ÎÊý£¬ÒªÊ¹ÓÃas_viewÕâ¸ö·½·¨À´×ª»»
Èç¹ûÖ¸¶¨ÁËendpoint£¬ÄÇôÔÚʹÓÃurl_for·´×ªµÄʱºò£¬¾ÍҪʹÓÃendpointÖ¸¶¨µÄÄǸöÖµ£¬Èç¹ûûÓÐÖ¸¶¨ÄǸöÖµ£¬¾ÍʹÓÃas_viewÖÐÖ¸¶¨µÄÊÓͼÃû×ÖÀ´×÷Ϊ·´×ª¡£
ÀàÊÓͼÓÐÒÔϵĺô¦£¬¿ÉÒÔ½«Ò»Ð©¹²ÐԵĶ«Î÷³éÈ¡³öÀ´·Åµ½¸¸ÊÓͼÖУ¬×ÓÊÓͼֱ½Ó¼Ì³Ð¾Í¿ÉÒÔÁË£¬µ«ÊÇÒ²²»ÊÇ˵ËùÓеÄÊÓͼ¶¼ÒªÊ¹ÓÃÀàÊÓͼ£¬Õâ¸öÒª¸ù¾Ýʵ¼ÊÇé¿öÀ´¶¨¡£
СÀý×Ó£º
from flask import
Flask,views,url_for
app = Flask(__name__)
class ListView(views.View):
def dispatch_request(self):
return 'list view'
#app.add_url_rule('/list/',endpoint='list' ,view_func=ListView.as_view('list'))
app.add_url_rule('/list/' ,view_func=ListView.as_view('list'))
with app.test_request_context():
print(url_for('list'))
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True) |
ÀàÊÓͼµÄСÀý×Ó£º
#×Ô¶¨Òå·â×°,·µ»ØjsonÊý¾Ý
class JSONView(views.View):
def get_data(self):
raise NotImplementedError
def dispatch_request(self):
return jsonify(self.get_data())
class ListView(JSONView):
def get_data(self):
return {
'username':'wanghui',
'password':123456,
}
app.add_url_rule('/list/',endpoint='my_list' ,view_func=ListView.as_view('list'))
#Óм¸¸öÊÓͼ£¬ÐèÒª·µ»ØÏàͬµÄ±äÁ¿(¹ã¸æÒ³Ãæ)
class ADSView(views.View):
def __init__(self):
super(ADSView, self).__init__()
self.context = {
'ads':"½ñÄê¹ý½Ú²»ÊÕÀñ£¬ÊÕÀñÖ»ÊÕÄÔ°×½ð"
}
class RegistView(ADSView):
def dispatch_request(self):
self.context.update({'username':'abcd'})
return render_template('register.html',**self.context)
class LoginView(ADSView):
def dispatch_request(self):
return render_template('login.html',**self.context)
# class LoginView(views.View):
# def dispatch_request(self):
# return render_template('login.html' ,ads="½ñÄê¹ý½Ú²»ÊÕÀñ£¬ÊÕÀñÖ»ÊÕÄÔ°×½ð")
# class RegistView(views.View):
# def dispatch_request(self):
# return render_template('register.html' ,ads="½ñÄê¹ý½Ú²»ÊÕÀñ£¬ÊÕÀñÖ»ÊÕÄÔ°×½ð")
app.add_url_rule('/login/ ',view_func=LoginView.as_view('login'))
app.add_url_rule('/regist/' ,view_func=RegistView.as_view('regist'))
@app.route('/')
def hello():
return "heello"
if __name__ == '__main__':
app.run() |
»ùÓÚµ÷¶È·½·¨µÄÊÓͼ
¸ù¾ÝÇëÇó·½·¨À´Ö´Ðв»Í¬µÄ·½·¨µÄ£¬Èç¹ûÓû§·¢Ë͵ÄÊÇgetÇëÇ󣬾ͻáÖ´ÐÐÕâ¸öÀàµÄget·½·¨£»Èç¹ûÓû§·¢ÆðµÄÊÇpost·½·¨£¬¾Í»áÖ´ÐÐÕâ¸öÀàµÄpost·½·¨¡£ÆäËûµÄ·½·¨ÀàËÆ£¬ÕâÖÖ·½·¨Ê¹µÃ´úÂë¸ü¼Ó¼ò½à£¬Ê¹µÃÖ´ÐÐgetÇëÇóµÄ´úÂë·ÅÔÚget·½·¨ÖУ¬postÇëÇóµÄ´úÂë·ÅÔÚposy·½·¨ÖС£¾Í²»ÐèÒª¸ú֮ǰµÄrequest.method
== 'POST'À´¸ãÁË¡£
СÀý×Ó
py
from flask import
Flask,views,render_template,request
app = Flask(__name__)
class LoginView(views.MethodView):
def __render(self,error=None):
return render_template('login.html',error=error)
def get(self,error=None):
# return render_template('login.html',error=error)
return self.__render()
def post(self):
username = request.form.get('username')
password = request.form.get('password')
if username == 'wanghui' and password == '111111':
return 'login success'
else:
# return render_template('login.html' ,error="username
or password error£¬retry!")
# return self.get(error= "username or password
error£¬retry!")
return self.__render(error= "username or
password error£¬retry!")
app.add_url_rule('/login/' ,view_func=LoginView.as_view('login'))
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True,port=9090) |
login.html
<!DOCTYPE
html>
<html lang="en">
<head> <meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="" method="post">
<table> <tr> <td>Óû§Ãû</td>
<td><input type="text" name="username"></td>
</tr> <tr> <td>ÃÜÂë</td>
<td><input type="password"
name="password"></td> </tr>
<tr> <td></td> <td><input
type="submit" value="Á¢¼´µÇ½"></td>
</tr> </table>
{% if error %} <p style="color: red;">{{
error }}</p>
{% endif %}
</form>
</body>
</html> |
ÀàÊÓͼÉÏÃæÊ¹ÓÃ×°ÊÎÆ÷
Á½ÖÖÀàÐ͵Ä×°ÊÎÆ÷
Èç¹ûʹÓõÄÊǺ¯ÊýÊÓͼ£¬ ÄÇô¶¨ÒåµÄ×°ÊÎÆ÷±ØÐë·ÅÔÚapp.routeÏÂÃæ£¬·ñÔòÆð²»µ½ÈκÎ×÷ÓÃ
ÀàÊÓͼµÄ×°ÊÎÆ÷£¬ÐèÒªÖØÐ´ÀàÊÓͼµÄdecoratorsÀàÊôÐÔ£¬ÀïÃæ×°µÄ¾ÍÊÇËùÓеÄ×°ÊÎÆ÷
СÀý×Ó£º
from flask import
Flask,request,views
from functools import wraps
vapp = Flask(__name__)
#¶¨Òå×°ÊÎÆ÷
def login_required(func):
@wraps(func)
def wrapper(*args,**kwargs):
username = request.args.get('username')
if username and username == 'wanghui':
return func(*args,**kwargs)
else:
return "ÇëÏȵǼ"
return wrapper
@app.route('/settings/')
@login_required
def settings():
return 'ÕâÊÇÉèÖÃÒ³Ãæ'
#ÕâÑùÇëÇó¾ÍÐÐ http://127.0.0.1:9091/settings/?username=wanghui
#ÀàÊÓͼÌí¼Ó×°ÊÎÆ÷
class ProfileView(views.View):
decorators = [login_required]
def dispatch_request(self):
return "ÕâÊǸöÈËÖÐÐÄ"
app.add_url_rule('/profile/ ',view_func=ProfileView.as_view('profile')) |
À¶Í¼
½«´óÐÍÏîÄ¿·Ö²ã½âñʵÏÖÄ£¿é»¯£¬½á¹¹¸ü¼ÓÇåÎú¡£¿ÉÒÔ½«ÏàͬµÄÄ£¿é·ÅÔÚͬһ¸öÀ¶Í¼Ï£¬Í¬Ò»¸öÎļþ¼ÐÖС£·½±ã¹ÜÀí¡£
»ù±¾Óï·¨£º
ÔÚÀ¶Í¼ÎļþÖе¼ÈëBlueprint
from flask import
Blueprint
user_bp = Blueprint('user',__name__) #Ï൱ÓÚÊǶ¨Òå`app
= Flask(__name__)` |
ÔÚÖ÷appÎļþÖÐ×¢²áÀ¶Í¼
from blueprints.user
import user_bp
app.regist_blueprint(user_bp) #ʵÏÖ×¢²áÀ¶Í¼ |
Èç¹ûÏëҪij¸öÀ¶Í¼ÏµÄËùÓÐURLµÄʱºòÓиöǰ׺£¬ÄÇô¿ÉÒÔÔÚ¶¨ÒåÀ¶Í¼µÄʱºò¼ÓÉÏurl_prefix
from flask import
Blueprint
user_bp = Blueprint('user',__name__£¬url_prefix='/user')
# ÌØ±ð×¢Òâб¸Ü |
À¶Í¼ÖеÄÄ£°åÎļþ
À¶Í¼Ä£°åÎļþ²éÕÒ£º
Èç¹ûÏîÄ¿ÖеÄtemplatesÎļþ¼ÐÖдæÔÚ¶ÔÓ¦µÄÄ£°åÎļþ£¬¾Í¿ÉÒÔÖ±½ÓʹÓÃ
Èç¹ûÏîÄ¿ÖеÄtemplatesÎļþ¼ÐÖдæÔÚÏàÓ¦µÄÄ£°åÎļþ£¬ÄÇô¾ÍÔÚ¶¨ÒåÀ¶Í¼µÄÖ¸¶¨Â·¾¶ÖвéÕÒ£¬¿ÉÒÔÉèÖÃÏà¶Ô·¾¶£¬¾ÍÒªÔÚÀ¶Í¼ÎļþÏàͬ·¾¶ÏµÄÎļþ¼Ð¡£
from flask import
Blueprint,render_template
news_bp = Blueprint('news',__name__,url_prefix='/news'
,template_folder='news')
@news_bp.route('/list/')
def news_list():
return render_template('news_list.html') |
À¶Í¼Öеľ²Ì¬Îļþ²éÕÒ£º
ÔÚÄ£°åÎļþÖУ¬¼ÓÔØ¾²Ì¬Îļþ£¬Èç¹ûʹÓÃurl_for('static')£¬ÄÇôֻ»áÔÚappÖ¸¶¨µÄ¾²Ì¬Îļþ¼ÐĿ¼Ï²éÕÒ¾²Ì¬Îļþ
Èç¹ûÔÚ¼ÓÔØ¾²Ì¬ÎļþµÄʱºòÖö¥ÁËÀ¶Í¼µÄÃû×Ö£¬±ÈÈçurl_for('news.static')£¬ÄÇô»áµ½À¶Í¼Ö¸¶¨µÄstatic_folderϲéÕÒ¾²Ì¬Îļþ¡£
url_for·´×ªÀ¶Í¼×¢ÒâÊÂÏî
×¢Òâurl_forµ½À¶Í¼ÖеÄÊÓͼº¯ÊýµÄʱºò£¬Òª·´×ªÀ¶Í¼ÖеÄÊÓͼº¯ÊýΪurl£¬ÄÇô¾ÍÓøÃÔÚʹÓÃurl_forµÄʱºòʹÓÃurl_for('news.news_list')²»È»¾ÍÕÒ²»µ½Õâ¸öendpoint¡£
¼´Ê¹ÔÚͬһ¸öÀ¶Í¼ÖУ¬·´×ªÊÓͼº¯Êý£¬Ò²ÒªÖƶ¨À¶Í¼µÄÃû×Ö
×ÓÓòÃûʵÏÖ
ʹÓÃÀ¶Í¼¼¼Êõ
ÔÚ´´½¨À¶Í¼¶ÔÏóµÄʱºòҪʹÓÃsubdomainÀ´Ö¸¶¨Õâ¸ö×ÓÓòÃû
from flask import
Blueprint
cms_bp = Blueprint('cms',__name__,subdomain='cms') |
ÐèÒªÔÚappÎļþÖÐÅäÖÃapp.config['SERVER_NAME']='baidu.com'À´Ö¸¶¨¸úÓòÃû
app.config['SERVER_NAME']
= 'crop.com:9099' |
ÐÞ¸ÄhostsÎļþÅäÖýâÎö
127.0.0.1 crop.com
127.0.0.1 cms.crop.com |
5.·ÃÎÊ
×ÛºÏʵÀý´úÂë
Ŀ¼½á¹¹
blue_print_e
©À©¤©¤ blue_print_e.py
©À©¤©¤ blueprints
©¦ ©À©¤©¤ bok.py
©¦ ©À©¤©¤ cms.py
©¦ ©À©¤©¤ movie.py
©¦ ©À©¤©¤ news_css
©¦ ©¦ ©¸©¤©¤ news_list.css
©¦ ©À©¤©¤ news.py
©¦ ©À©¤©¤ news_tmp
©¦ ©¦ ©¸©¤©¤ news_list.html
©¦ ©¸©¤©¤ user.py
©À©¤©¤ static
©¦ ©¸©¤©¤ news_list.css
©¸©¤©¤ templates
©À©¤©¤ index.html
©¸©¤©¤ news_list.html |
Ö÷appÎļþblue_print_e.py
from flask import
Flask,url_for,render_template
from blueprints.user import user_bp
from blueprints.news import news_bp
from blueprints.cms import cms_bp
app = Flask(__name__)
app.config['SERVER_NAME'] = 'crop.com:9099'
app.register_blueprint(user_bp)
app.register_blueprint(news_bp)
app.register_blueprint(cms_bp)
# ipµØÖ·²»ÄÜÓÐ×ÓÓòÃû
@app.route('/')
def hello_world():
print(url_for('news_tmp.news_list')) #ʹÓÃÀ¶Í¼Ãû×Ö.ÊÓͼº¯ÊýµÄÃû×Ö
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True,port=9099) |
blueprints/news.py
#!/usr/bin/env
python
# -*- coding: utf-8 -*-
from flask import Blueprint,render_template,url_for
news_bp = Blueprint('news_tmp',__name__,url_prefix
='/news_tmp',template_folder='news_tmp ',static_folder='news_css')
@news_bp.route('/list/')
def news_list():
print(url_for('news.news_detail'))
return render_template('news_list.html')
@news_bp.route('/detail')
def news_detail():
return "ÏêÇéÒ³Ãæ" |
blueprints/user.py
#!/usr/bin/env
python
# -*- coding: utf-8 -*-
from flask import Blueprint
user_bp = Blueprint('user',__name__,url_prefix='/user')
@user_bp.route('/profile/')
def profile():
return "¸öÈËÖÐÐÄ"
@user_bp.route('/settings/')
def settings():
return "ÉèÖÃÒ³Ãæ" |
blueprint/cms.py
#!/usr/bin/env
python
# -*- coding: utf-8 -*-
from flask import Blueprint
cms_bp = Blueprint('cms',__name__,subdomain='cms')
@cms_bp.route('/')
def index():
return 'cms index' |
blueprints/news_css/
body {
color: fuchsia;
font-size: 90px;
background: red;
} |
|