キタ━━━━(゚∀゚)━━━━!!
ってほどでもないが、ようやくトップページをどういう風に編集したらどう表現されるかわかってきた。
MySQLデータベースとの接続にも成功し、ブラウザから投げたwordをデータベースに書き込み、書き込んだデータベースから読み出したデータを画面上に埋め込む事ができるようになった。
shiroさんは前に書き込んだことがあるからデータベースにエントリーされており、Happy to see you again!というメッセージを返してもらっている。
ただそれだけで他のリンクとかはまだ全然実装してないけど。あと読み込んだデータにハイパーリンクをつけて他のページへリンクを張る方法もこれから。
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/flaskdata'
SQLとの接続部分はこういうふうに書き換えるだけ。MySQLのお作法としてdatabaseの名前に拡張子とかつけちゃいけない。
あとpymysqlモジュールをインストールしておく必要がある。
現状データベースへのアクセス用ユーザとパスワードをここに書いちゃっているので、そこはさらに動的に変動させられるように細工がいる。
データベース自体はやはり前もってMySQLの本体側で作っておく必要がある。
mysql > create database flaskdata default character set utf8; mysql> show create database flaskdata; +-----------+--------------------------------------------------------------------+ | Database | Create Database | +-----------+--------------------------------------------------------------------+ | flaskdata | CREATE DATABASE `flaskdata` /*!40100 DEFAULT CHARACTER SET utf8 */ | +-----------+--------------------------------------------------------------------+ 1 row in set (0.00 sec)
これさえやっとけばあとは
(venv3) $ python3 hello.py shell >>> from hello import db >>> db.create_all() >>> from hello import Role, User ・・・・
という感じにテーブルをpythonの方で作っていける。
結局のところSQLiteだろうがMySQLだろうがpythonから同じコマンドで操作できるようにしているのがSQLAlchemyの役割なんだな。
一通りテーブルができてしまえばあとはwebからの入力でrowは増やしていけるというわけだな。
ページビューの方も
base.htmlのnavbarのところを
{% block navbar %} <div class="navbar navbar-inverse" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/">Database</a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="/">Home</a></li> </ul> <ul class="nav navbar-nav"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Experiments </a> <ul class="dropdown-menu"> <li><a href="/">Exome</a></li> <li><a href="/">RNA-seq</a></li> <li><a href="/">Proteome</a></li> </ul> </li> </ul> <ul class="nav navbar-nav"> <li><a href="/">Announcement</a></li> </ul> <ul class="nav navbar-nav"> <li><a href="/">Publications</a></li> </ul> <ul class="nav navbar-nav"> <li><a href="/">Contact</a></li> </ul> <ul class="nav navbar-nav navbar-right"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Account </a> <ul class="dropdown-menu"> <li><a href="/">Change Password</a></li> <li><a href="/">Change Email</a></li> <li><a href="/">Log Out</a></li> </ul> </li> </ul> </div> </div> </div> {% endblock %} {% block content %} <div class="container"> {% for message in get_flashed_messages() %} <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %} {% block page_content %}{% endblock %} </div> {% endblock %}
だいたいこんな感じで書いていけばそれっぽくなる。リンクはまだ全然張ってない。