ド素人がVisualStudioでFlaskを利用した時のTIPS

Flaskのインストールまでは割愛します。

###Flaskの初期構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/c861f5fc-866d-92d9-7cf6-936cf29b8d9e.png)


###スタートファイル(runserver.py)
初期設定ではスタートアップファイルがrunserver.pyになっています。
『app.run』関数を実行してアプリを起動させること”だけ”がこのrunserver.pyファイルの役割です。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/417dfd29-6c77-1afd-80ae-04d5b5ad75d8.png)

ソリューションエクスプローラーの『_201114FlaskScraping』フォルダの直下に『__init__.py』というファイルがあります。この名前のファイルを作っておくと、_201114FlaskScrapingをパッケージとしてインポートできるようになります。
『runserver.py』は『_201114FlaskScrapingというパッケージ』をインポートして、それを起動させているだけ、ということです。
「from _201114FlaskScraping import app」

```runserver.py
from os import environ
from _201114FlaskScraping import app
from _201114FlaskScraping import hensu

if __name__ == '__main__':
    HOST = environ.get('SERVER_HOST', 'localhost')
    try:
        PORT = int(environ.get('SERVER_PORT', '5555'))
    except ValueError:
        PORT = 5555

    #本番ローカル変数を取得して切り分け
    if hensu.debug_int()==0:
        app.run(HOST, PORT)
    else:                          
        #テスト環境ではdebugはTrue
        app.run(debug=True, host='0.0.0.0', port=int(environ.get('PORT', 5000)))
```

###__init__.pyの役割
__init__.pyの主な役割は２つあります。
①pythonスクリプトがあるディレクトリを表す
②必要なモジュールをimportするなどの初期化処理を記載し，初期化

```__init__.py
"""
The flask application package.
"""

from flask import Flask
app = Flask(__name__)

import _201114FlaskScraping.views
```

###ルーティング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/91529fe9-5f94-7197-208d-0f385744ad13.png)

```view.py
"""
Routes and views for the flask application.
"""
from datetime import datetime
from flask import render_template

from _201114FlaskScraping import app

@app.route('/')
@app.route('/home')
def home():
    """Renders the home page."""
    return render_template(
        'index.html',
        title='Home Page',
        year=datetime.now().year,
    )

@app.route('/contact')
def contact():
    """Renders the contact page."""
    return render_template(
        'contact.html',
        title='Contact',
        year=datetime.now().year,
        message='Your contact page.'
    )

@app.route('/about')
def about():
    """Renders the about page."""
    return render_template(
        'about.html',
        title='About',
        year=datetime.now().year,
        message='Your application description page.'
    )
```
###form/inputでサーバーサイドに値を渡す

「method="POST" action="/about"」にしてサーバーへ投げる

```index.html
    <form method="POST" action="/about">
        <label>テキスト：</label>
        <input type="text" class="form-control" id="name" name="name" placeholder="Name">
        <button type="submit">送信</button>
    </form>
```
「@app.route('/about',methods=['POST'])」として受け取る

```views.py
@app.route('/about',methods=['POST'])
def about():
    """Renders the about page."""
    return render_template(
        'about.html',
        title='About',
        year=datetime.now().year,
        message='Your application description page.'
    )
```


/aboutページが表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/421c22e3-8959-0405-eeb4-7d295ceb19ac.png)


###Flaskの機能を追加していく方向性
基本的な方針は『views.py』に機能を増やしていくことです。
ただ、プログラムが煩雑になるので「BluePrint」をつかっていくとのこと...（続く

###pyファイルを読み込んで利用する
module1.pyを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/a35ad063-ea56-1ec0-7930-122f2b73be8e.png)

```module1.py
def test_func():
    return('aaaaa')
```

```views.py
"""
Routes and views for the flask application.
"""

from datetime import datetime
from flask import render_template
from _201114FlaskScraping import app
from _201114FlaskScraping import module1

@app.route('/')
@app.route('/home')
def home():
    """Renders the home page."""
    return render_template(
        'index.html',
        title='Home Page',
        year=datetime.now().year,
    )

@app.route('/contact')
def contact():
    """Renders the contact page."""
    return render_template(
        'contact.html',
        title='Contact',
        year=datetime.now().year,
        message='Your contact page.'
    )

@app.route('/about',methods=['POST'])
def about():
    """Renders the about page."""
    mess=module1.test_func()
    return render_template(
        'about.html',
        title='About',
        year=datetime.now().year,
        message=mess
    )

```

参考：https://qiita.com/kk7679/items/f12e2794b1bb0625d9fa

###seleniumを使ってみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/fababb8c-69ce-98f3-8b12-d895701a7c5b.png)

webドライバを配置
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346533/039ee052-510a-9d75-9e15-fb557968877e.png)

参考：https://qiita.com/nsuhara/items/76ae132734b7e2b352dd
参考：https://qiita.com/ymgn_ll/items/4c2964a14ff80ca2fa28

###通知用にLineを使う
https://tanuhack.com/selenium-bs4-heroku/