開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Python 3.6 (プログラミング言語)
Head First Python (Paul Barry (著)、O'Reilly Media)のChapter 12.(113/4 A Little Bit of Threading: Dealing With Waiting) の EXERCISE(No. 8722) を取り組んでみる。
EXERCISE(No. 8722)
コード(Emacs)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # cursor.execute('''create table log ( # id int auto_increment primary key, # ts timestamp default current_timestamp, # phrase varchar(128) not null, # letters varchar(32) not null, # ip varchar(16) not null, # browser_string varchar(256) not null, # results varchar(64) not null )''') from flask import Flask, render_template, request, escape, copy_current_request_context from DBcm import UseDatabase, CustomException from threading import Thread import sqlite3 import vsearch app = Flask(__name__) app.config['dbconfig'] = {'host': '127.0.0.1', 'user': 'vsearch', 'password': 'vsearchpasswd', 'database': 'vsearchlogDB'} @app.route('/') @app.route('/entry') def entr_page() -> 'html': return render_template('entry.html', the_title='Welcome to search4letters on the web!') @app.route('/search4', methods=['POST']) def do_search() -> 'html': @copy_current_request_context def log_request(req: 'flask_request', res: str) -> None: # with UseDatabase(app.config['dbconfig']) as cursor: with UseDatabase(app.config['dbconfig']) as cursor: _SQL = '''insert into log (phrase, letters, ip, browser_string, results) values (?, ?, ?, ?, ?)''' cursor.execute(_SQL, (req.form['phrase'], req.form['letters'], req.remote_addr, req.user_agent.browser, res)) phrase = request.form['phrase'] letters = request.form['letters'] title = 'Here are your result:' results = str(vsearch.search4letters(phrase, letters)) try: t = Thread(target=log_request, args=(request, results)) t.start() except CustomException as err: print(err) except Exception as err: print(err) return render_template('results.html', the_title=title, the_phrase=phrase, the_letters=letters, the_results=results) @app.route('/viewlog') def view_the_log() -> 'html': with UseDatabase(app.config['dbconfig']) as cursor: _SQL = 'select phrase, letters, ip, browser_string, results from log' cursor.execute(_SQL) contents = cursor.fetchall() titles = ('Phrase', 'Letters', 'Remote_addr', 'User_agent', 'Results') return render_template('viewlog.html', the_title='View Log', the_row_titles=titles, the_data=contents,) if __name__ == '__main__': app.run(debug=True)
入出力結果(Terminal, IPython)
$ ./vsearch4log.py * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 873-014-066 127.0.0.1 - - [16/Apr/2017 12:52:33] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [16/Apr/2017 12:52:33] "GET /static/hf.css HTTP/1.1" 304 - 127.0.0.1 - - [16/Apr/2017 12:52:36] "POST /search4 HTTP/1.1" 200 - C-c C-c$
0 コメント:
コメントを投稿