Open sardine2 opened 7 years ago
重看 ch4 的卡包,还是觉得很艰难。同学们的代码,再一次粉碎了我脆弱的信心...... 比如即使是客户端向服务端请求数据的方法,就有只用 'POST'/ 只用 'GET' / 两者混用的。 以 oneshot 的 cat-stride 的队友为例:
大猫核心代码:
@app.route('/',methods=['GET','POST'])
def index():
weather = ''
if request.method == 'POST':
if 'query' in request.form.keys():
city_name = request.form['city_name']
weather = query_weather(city_name)
elif 'history' in request.form.keys(): #
his_info = show_history()
return render_template('index.html',info=his_info)
elif 'help' in request.form.keys(): #
help_info = show_help()
return render_template('index.html',info=help_info)
return render_template('index.html',info=weather)
全部用GET 方法 来实现客户端向服务端请求数据;表单 action属性填写为 @app.route('/query') / @app.route('/history') / @app.route('/help') 客户端提交和服务端返回不同的页面。 在 html 代码对应要写上 : {% if path == '/history' %} 等等备注。
判断代码
因为直接区分了路由路径,所以似乎不用区分
request.method == 'POST':
还是request.method == 'GET':
,统统默认 GET 直接就走对应的函数?用 request.args.get()取数据,比如像下面这样:
@app.route('/query')
def query():
city = request.args.get('city')
他的html模版用了 class,实在看得心塞~~
比如 <form method="get" action="/query" class="ui action input">
中的 class="ui action input"。
核心代码:
query_weather = weather.buildQuery(API_ADDRESS, KEY)
app = Flask(__name__)
history_list = []
@app.route('/')
def hello():
return render_template(TEMPLATE)
@app.route('/query')
def query():
city = request.args.get('city')
record = query_weather(city)
weather.save_record(history_list, record)
return render_template(TEMPLATE, path=request.path,
record=record)
@app.route('/history')
def history():
return render_template(TEMPLATE, path=request.path,
history=history_list)
@app.route('/help')
def help():
return render_template(TEMPLATE, path=request.path)
同时用 HTTP的 'POST'和 'GET' 方法来传递参数,前者用来调用查询天气预报的函数,'GET'用来调用函数显示 help 和 history所渲染的页面。
核心代码:
app = Flask(__name__)
listH = []
@app.route('/', methods=['POST', 'GET'])
def getWeather():
if request.method == 'POST':
listA = []
key = request.form['key']
data = fetchWeather(key, 1)
if 'status' in data:
return render_template('main.html',
weather='No result. Need Help?')
else:
a = sortData(data, key, 1)
listH.append(a[0])
listA.append(a[0].split(' '))
listA=listA[0]
del listA[0]
return render_template('main.html',
city=listA[0],
weather=listA[1],
temp=listA[2],
wind=listA[3])
elif request.method == 'GET':
if request.args.get('button') == 'Help':
return render_template('main.html',
help=' ')
elif request.args.get('button') == 'History':
return render_template('main.html',
history=set(listH))
else:
return render_template('main.html')
还有一种是 @fatfox2016 和 @yifan127 同学的,用了面向对象的代码,在观看过程中我感觉到了严重的不适~~并且在关闭后仍有一种在太空畅游的晕眩之感(不希望再经历)。
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
session['ipText'] = wAPIT.ipCity() #'您所在地:' + ipCity['region'] + ipCity['city']userInput = form.name.data.strip()
userInput = form.name.data.strip()
以上这都是什么鬼啊,我受到了来自一切 class defname()和 self. 深深的伤害~~
我把自己之前的代码找出来重新学习了,然后想做一个在查询时可选择实时天气预报和5天预报的页面,问了@faketooth 教练说可以实现。。嗯,我准备有空就摸索一下。 总之,路还很漫长 ;(
GET
可以在地址栏直接查询内容,也可以把查询的结果页面复制地址给其他伙伴。
实用来说
GET
,比如大多网站的搜索POST
,比如登录,工单填写 ...啊,才发现 @gogu 同学居然 commented 这个 issue 了,现在明白啦,关于 GET的用法。多谢!
一个Web应用的本质就是:
浏览器发送一个HTTP请求;
服务器收到请求,生成一个HTML文档;
服务器把HTML文档作为HTTP响应的Body发送给浏览器;
浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。
所以,最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。Apache、Nginx、Lighttpd等这些常见的静态服务器就是干这件事情的。