Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
flaskÖ®Èý£ºÊÓͼ¸ß¼¶
 
  2123  次浏览      30
 2019-7-26
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ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.·ÃÎÊ

cms.crop.com£º9099

×ÛºÏʵÀý´úÂë

Ŀ¼½á¹¹

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;
}
 
   
2123 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ