flaskでmysqlを使ってローカルDBを作る

 

全体の流れ

全体の流れとしては、

 

  1. まずコマンドプロンプトに管理者としてアクセス
  2. mysqlサーバーを立ち上げ、
  3. ログインしてデータベースを作成。
  4. vscodeに戻り、
  5. テーブル名と追加したいカラムを定義
  6. レコードをおまじないのように書き追加して作成。

 

 

まずローカルDBを立ち上げます。

まずコマンドプロンプトと検索して

管理者として実行を押します。

 

 

mysql --version

mysqlのバージョンを調べ

 

net start mysql80

 

mysqlを起動します。

 

既に起動されている場合はこの工程は無視してください。

なお下記のコマンドでmysqlを停止できます。

net stop mysql80

 

mysqlにログイン

なお次に下記のコマンドを入力してログインします。

mysql --user=root --password

このように表示されたら成功です。

 

show databases;

でデータベースを表示することが可能です

 

 

データベースの作成。

CREATE DATABASE データベース名;

でデータベースを作成する事ができます。

 

データベース削除

drop database 削除したいデータベース名;

でデータベースを削除する事ができます。

 

作成したデータベースをFlaskに繋げる。

まずは

pip install Flask-SQLAlchemy

pip install pymysql

 

をインストールします

 

そして下記をインポートして

 

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.mysql import INTEGER, VARCHAR

 

先ほどはサーバー内にデータベースを作りましたが、

今度はでデータベース内にテーブルを作っていきます。

 

class Memo(db.Model):
    """
        Memoモデルの定義
    """
    __tablename__ = "memos"

    id = db.Column("id", INTEGER(11), primary_key=True)
    memo = db.Column("memo", VARCHAR(255), nullable=True)

# テーブルの生成
db.create_all()

クラスと

 __tablename__ = "memos"

で、テーブル名を定義して、

 

その下にカラムを追加していきます。

 

それで終わり。

 

後は基本的にhtmlのフォームの内容をpythonで取得して、

 

レコードに挿入したり

 

取り出したりする。

 

下記はサンプルコード。

 

# おまじない
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

# dbの初期化
db = SQLAlchemy(app)

class User(db.Model):
    """
        Userモデルの定義
    """
    __tablename__ = "users"

    id = db.Column("id", INTEGER(11), primary_key=True)
    memo = db.Column("memo", VARCHAR(255), nullable=True)


@app.route("/insert", methods=["POST"])
def insert():
    # postの受け取り
    id_txt = request.form["id"]
    # idの生成
    id = User(id=id_txt)

    # postの受け取り
    memo_txt = request.form["memo"]
    # Memoの生成
    memo=User(memo=memo_txt)
   
    # Userオブジェクトを作成し、IDとMemoを設定
    new_user = User(id=id_txt, memo=memo_txt)
    # UserをDBに反映
    db.session.add(new_user)
    db.session.commit()

@app.route("/select", methods=["GET"])
def select():
    Users = User.query.all()
   
   
    return  render_template('f.html',memos=Users)


@app.route('/')
def index():
   
   return render_template('index.html',)

 

 

ログイン機能。

 

 

 

 

 

flaskとherokuでアプリを作る方法

flaskとherokuでアプリを作る方法

 

 

まずサイト名の入ったフォルダを作成

その中にapp.pyファイルを作る

 

 


その後仮想環境を作っていこう。

 

 


python -m venv (仮想環境名)

を実行して、仮想環境を作り

(仮想環境名)\Scripts\activate.ps1

で仮想環境に入ろう。

 

そして今回必要依存パッケージは

flask、

なので

pip install flask


でインストールしていく

 

次にtemplatesフォルダとstaticフォルダを作成し、その下にhtmlファイルcssフォルダを作成して、その下にcssファイルを作成しよう。


appファイル内を下記のように記載して

 

from flask import Flask
from flask import Flask, render_template

app = Flask(__name__, static_folder='./static')  

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True,host='0.0.0.0', port=5000)

 

次にhtml内を下記のように記載してローカルサーバーを起動させてhtml、cssの効いたh1タグが表示されるか確認しよう。

 

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Roboses</title>

    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap"
        rel="stylesheet">

    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">

</head>
<body>
    <h1>aaaaaaaaaaaaa
    </h1>
</body>
</html>

 

ファビコン

 

次にファビコンを設定していこう

 

 

ファビコンとはサイトページ上の小さなアイコンのことだ。

 

まずファビコンファイル(.ico)を作成していく

 

https://www.xiconeditor.com/

 

にアクセスしてま頑張ってくれ

 



ファビコンファイルが完成したら、staticフォルダの下にimagesフォルダを作成してそこに保存してくれ

 

そしてhtmlファイルに

<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='images/favicon.ico') }}" />

を追加して完了だ。

 

ブートストラップ

さてここからはブートストラップを使ってuiを構築していこう

 

ブートストラップとはTwitter社が開発したフレームワークらしい。

 

簡単に言うとmedeiaクエリを使わずに自動的にレスポンシブデザインを構築してくれる便利な物

 

 

 

herokuデプロイ

 

Herokuをデプロイするにあたって必要ファイルがあるのでそこを用意していきましょう

 

・Procfile
・requirements.txt
・runtime.txt

 

 

まずをインストールして

 

pip install gunicorn

 

 

・Procfile

 

Procfileという名前のファイルを作成して

ファイル内に

web: gunicorn <実行するファイル名>:app --log-file=-

を作りましょう。

※この時、拡張子はなしで保存しましょう!

 

・requirements.txt

 

requirements.txtは下記を打ち込むだけです

 

pip freeze > requirements.txt

 

 

 

・runtime.txt

 

 

runtime.txtファイルを作成して

python -V

 

pythonのバージョンを確認して

 

だったので

 

Python-3.11.1

 

と打ち込みましょう。



ここからだ

 

そしてコマンドから

heroku login --interactive

または

heroku login

と打ち込みHerokuにログインします。

 

 

 

heroku login --interactive

の場合パスワードはapi keyを入力しましょう。


ログインできたら

heroku create <好きなアプリケーション名>

とコマンドに打ち込んでHeroku上にアプリを作成しましょう。

 


そしてプッシュしていきます。

なお初プッシュする際はこのように入力してください。

git remote add heroku

https://git.heroku.com/roboses-g2023418.git

.gitは


https://git.heroku.com/(自分のアプリ名).git

 

にしてください。

なお

デプロイする際は

app.run(debug=True,host='0.0.0.0', port=5000)

 

debug=True,

 

を削除

これでプッシュしてデプロイできる

 

git push heroku master



 

 

変更を再デプロイする際は

 

git add .
git commit -m "Fix Testdbs model and form"
git push heroku master

 

 

ドメイン独自ドメインに…

 

koleoblog.info

 

これを最初に見たあとに

ivoice.hateblo.jp

 

 

を見ればできるはず

 

 

ssl

 

https://dash.cloudflare.com/57b22a86199e36627a668e5765af89c4

herokuデプロイ。

【Python/Flask】作成したアプリをHerokuで公開する方法(Windows、Mac編)

 

herokuを使ってPythonのflaskで作ったアプリケーションをデプロイする方法と注意点!|スタビジ

 

 

 

 上記二つを見れば何とかなる。

 

ログインする際は

 

heroku login --interactive

 

を実行あとパスワードはapiキーを入力。

Heroku

 

アプリ名は小文字を使う。

 

 

 

今回と前回のruntime.txt

 

python-3.11.0

 

requirements.txtは

 

Flask==2.2.3
Flask-Login==0.6.2
Flask-Mail==0.9.1
Flask-SQLAlchemy==3.0.3
Jinja2==3.1.2
MarkupSafe==2.1.2
PyTweening==1.0.4
SQLAlchemy==2.0.9
Werkzeug==2.2.3
blinker==1.6.2
click==8.1.3
greenlet==2.0.2
itsdangerous==2.1.2
pygetwindow==0.0.9
pymsgbox==1.0.9
pyperclip==1.8.2
pyrect==0.2.0
pyscreeze==0.1.28
python3-Xlib==0.15
typing-extensions==4.5.0
waitress==2.1.2
gunicorn==20.1.0
PyJWT==2.6.0
PyMySQL==1.0.2
email-validator==1.3.1

 

初コミットする際は

 

メールとユーザー名を登録。

 

 

初プッシュする際は

 

git remote add heroku https://git.heroku.com/roboses-g2023418.git

 

太文字の後ろはアプリごとにかわる。

 

デプロイする際は

app.run(debug=True,host='0.0.0.0', port=5000)

 

debug=True,

 

を削除

 

これでプッシュしてデプロイできる

 

git push heroku master

 

 

独自ドメインのやり方は下記を参照しろ。

 

koleoblog.info

 

www.onamae.com

 

 

 

 

変更を再デプロイする際は

 

git add .
git commit -m "Fix Testdbs model and form"
git push heroku master

 

 

 

dbの設定はこちら

qiita.com

 

特定商取引法に基づく表記

 

     
販売事業者名 ご請求書があり次第提供します。事業者の電話番号またはメールアドレスにてご連絡ください。  
所在地 ご請求書があり次第提供します。事業者の電話番号またはメールアドレスにてご連絡ください。  
電話番号 090-76959249  
メールアドレス 2ccvmcc02@gmail.com  
運営統括責任者 ご請求書があり次第提供します。事業者の電話番号またはメールアドレスにてご連絡ください。  
追加手数料等の追加料金 特になし  
交換および返品(返金ポリシー)

<お客様都合の返品・解約の場合>
発送処理前の商品:ウェブサイトの解約ボタンを押すことで注文の解約が可能です。

 

返品についてはお受けしておりません。予めご了承ください。

 
引渡時期

購入後すぐにご利用いただけます。     

 

受け付け可能な決済手段 クレジットカードでのお支払い

 

決済期間 クレジットカード決済の場合はただちに処理されます  
販売価格 税込490円

django新規登録機能。

今回は、djangoによる、新規登録機能を作っていきます。

 

 

まずはフォルダのパス設定を行います。

 

フォルダのパス設定

 

プロジェクト/settings.pyに行き

 

Template(HTML)、static(CSS)、及びmedia(画像)フォルダのディレクトリ指定をしていきます。

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# テンプレート(HTML)
TEMPLATE_DIR = os.path.join(BASE_DIR,"Template")
# static(CSS)
STATIC_DIR = os.path.join(BASE_DIR,"static")
# 画像
MEDIA_DIR = os.path.join(BASE_DIR, "media")

これは上記をコピペしましょう。

 

つぎは、settings.py内のTEMPLATESリストを見つけ


'DIRS': [],

こん中を

'DIRS': [TEMPLATE_DIR,],

こうしましょう。

 

 

その次は、

これがあるところに移動し、

その下に

STATICFILES_DIRS = [STATIC_DIR,]

#MEDIA_DIR

MEDIA_ROOT = MEDIA_DIR

MEDIA_URL = "/media/"

 

こいつらをコピペしましょう。

 

これにてディレクトリ設定は完了です。

 

パスワードのハッシュ化設定

まずはsettings.py内の

AUTH_PASSWORD_VALIDATORS

リストを見つけましょう。

そして、この中に、

PASSWORD_HASHERS = [
    "django.contrib.auth.hashers.Argon2PasswordHasher",
    "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
    "django.contrib.auth.hashers.BCryptPasswordHasher",
    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
    "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
]

こちらをコピペします。

 

次に、パスワードの強度を定義するために、

 

PASSWORD_HASHERSの下のAUTH_PASSWORD_VALIDATORSを編集します。

 

MinimumLengthValidatorの下に

 'OPTIONS':{"min_length":6},

上記をコピペします。

 

 'OPTIONS':{"min_length":6},

ちなみにこの6の意味は、パスワードの強度で、パスワードの最小単位を設定しています。

つまりこの設定をしたので、5桁のパスワードは登録されません。

 

6桁以上のパスワードだけが登録されます。

 

これで、settings.pyの設定は終了です。

 

モデルの設定

次はモデルの設定をしていきます。

 

はいー

いつも通りapp/のmodels.pyを開き

 

from django.db import models
# ユーザー認証
from django.contrib.auth.models import User

# ユーザーアカウントのモデルクラス
class Account(models.Model):

    # ユーザー認証のインスタンス(1vs1関係)
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    # 追加フィールド
    last_name = models.CharField(max_length=100)
    first_name = models.CharField(max_length=100)
    account_image = models.ImageField(upload_to="profile_pics",blank=True)

    def __str__(self):
        return self.user.username
       

上記をコピペします。

 

そして保存して

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DjangoWebアプリ、urls.pyとviews.pyについて、

まずdjangoのurls.pyとviews.pyですることは、

 

簡単に言うと、

 

urls.pyでURLを設定します。(このpathにアクセスされたら、このviews.pyを表示するなど)

 

views.pyでページに表示する内容を設定します。(htmlファイルを指定したり、)

 

urls.pyについて

まず、通常urlはapp内のurls.pyで設定するので、app/urls.pyに移動するコードをプロジェクト/urls.pyに書く必要があります。

 

from django.urls import path

にincludeを追加し、

from django.urls import path, include #追加             

こうします。

そして、ここに

urlpatterns = [
    path('admin/', admin.site.urls),

]

include("app名urls")を追加します。


urlpatterns = [
    path('admin/', admin.site.urls),
    path("",include("gsa.urls"))#追加
]
追加したら、app/urls.pyを新規で作ります。
 
(ちなみに、今追加したコードの意味は、""というパスが来たらgsa/のurls.pyを開けという意味です。)
 
app/の下に新規でurls.pyを作成したら、
from django.urls import path

from . import views
こいつらをインポートし、

urlpatterns = [
    path("",views.index),
]
をかきます。
(ちなみにこれの意味は、""というパスが来たら、views.pyのindex関数を返せという意味です。)
なので次はviews.pyをいじくり回します。
 
from django.http.response import HttpResponse
from django.shortcuts import render

# Create your views here.

def index(request):
  return HttpResponse("Hello")
まあとりあえず、これらを追加します。
from django.http.response import HttpResponse
HttpResponse関数
を使うためにインポートしたものです。
まあ後の説明は読めばなんとなくわかるでしょう。
 
そして、編集したファイルたちを保存したらサーバにアクセスしてみましょう。
helloと表示されたら成功です。おめでとう。
 
 
 
 
 
 
 

djangoでwebアプリを作ろうの会

今回の記事はdjangoを使ってwebアプリを作りながら書いていこうと思います。

 

まずは仮想環境から…

人類はなぜ仮想環境を作るのか?

私たち人類が誕生してから20万年の月日が勃ちますが"なぜ"私たちは仮想環境を作るのでしょうか

 

その謎を解き明かすためアマゾンの奥地へと向かった…

 

そこでは衝撃の事実が!!

なんと人類が仮想環境を作る理由の一つとして言われているのがライブラリはバージョンによって関数などが動かなくなる事があるかららしい

 

これはライブラリというよりはプログラムはバージョンによって動かなくなる事があるので

使いたい関数などのプログラムを使うためにバージョンを指定することがあるから

 

仮想環境を作ることによって独立させて、違うバージョンをインストールしてもほかのモジュールに影響を与えないようにするらしい

 

まあ極端な話、自分の家の蛇口をひねるとリンゴジュースが出てくるような事

をしたいとき

 

配水池の水にリンゴジュースができる成分を入れたら自分の家だけじゃなくて隣の家もリンゴジュースが出てきてしまうだろう。

配水池とは、消毒が全て完了した浄水を配水する前に一時的に蓄えておく浄水場内の設備

なので自分の家専用の配水池を作って、”独立”させる必要がある。

 

この独立が仮想環境だと思えばいい。

 

仮想環境の作り方

今回はvenvで仮想環境を作ろうと思うので、作り方を解説していこうと思う。

最初にフォルダ

まず、適用にフォルダを作り(今回はtetフォルダを作成した)

 

cd (フォルダ名)

で移動して、

python -m venv (仮想環境名)

というコマンドを実行し

 

これだと仮想環境を作成しただけなので、仮想環境

に入る必要があります。

仮想環境に入る方法

仮想環境に入る方法は

 

(仮想環境名)\Scripts\activate.ps1

 

というコマンド実行したら、仮想環境に入る事ができます。

 

仮想環境を終了する方法

おまけで仮想環境を終了する方法を書いていきます。

仮想環境を終了する方法は

deactivate

このコマンドを実行するだけです。

 

それでは!仮想環境が構築できたらdjangoをインストールしていきましょう!

djangoをインストール…

これは普通にpipで‼

pip install django

完了‼

インストールされてるか確認

インストールされてるか確認する方法は

pip freeze

pip list

で確認しましょう。

~インストールしたらやる事~

本記事の目的は、webアプリを作ることです。

なのでwebアプリを作る上でやる事は、djangoをインストールしたら、プロジェクトとアプリを作りましょう。

プロジェクトとアプリとは?

webアプリといえばtwitterなど色々ありますが、twitterにはフォローやいいねなど…様々な機能があります。

この様々な機能の総称がdjangoでは、プロジェクト、といい

フォローなどの一つ一つの機能は、アプリといいます。

 

djangoにおける、プロジェクトとアプリについてなんとなく理解したら、

早速プロジェクトとアプリを作っていきましょう。

 

プロジェクトの作り方

プロジェクトの作り方は

django-admin startproject (プロジェクト名)

で作ることが出来ます。

サーバーを立ち上げよう

プロジェクトができたら、

cd (プロジェクト名)

プロジェクトに移動して、

 

下記のコマンドを実行し、

python manage.py runserver

サーバーを立ち上げましょう。

ターミナルにurlが表示されたら、urlにアクセスし、

 

下記のようになれば、成功です。

サーバーを停止しよう。

おまけ…

 

サーバーを停止するはターミナルをクリックし、(ctrl+c)で停止できます。



アプリの作り方

アプリも同様コマンド一つで立ち上げ可能です。

python manage.py startapp (アプリ名)

初期設定

さて、プロジェクトとアプリを作成したら、2つ初期設定をしていきます。

1つ目

1つ目はアプリとプロジェクトは今、紐づけされていないのでアプリを登録して紐づけしていく必要があります。

アプリの登録方法

アプリを登録する方法は、settings.pyのINSTALLED_APPS

"(アプリ名).apps.(アプリ名)Config",

を追加します。

 

 

2つ目

2つ目は言語・タイムゾーンの変更をします。

言語・タイムゾーンの変更

言語・タイムゾーンの変更もsettings.pyで行い、

 

言語は、

ANGUAGE_CODE = 'en-us'

ANGUAGE_CODE = 'ja'

に変更して。

 

タイムゾーンは、

TIME_ZONE = 'UTC'

TIME_ZONE = 'Asia/Tokyo'

に変更します。

 

これで、初期設定は終了です。

 

モデルを作成

次にモデルを作成していきましょう。

モデルとは?

モデルとは、webアプリとデータベースを操作できるファイルです。

画像

画像:https://26gram.com/database-terms

テーブルを作成

それでは早速テーブルを作成して、モデルを定義していきます。

 

テーブルの作成方法は、models.pyにテーブルと同じ名前のクラスを作り、

class テーブル名(models.Model):

クラス変数にカラムを持ってきます。

カラム=models.関数()

モデルを定義したら…

models.pyにテーブルを作成したらマイグレーションファイルを作る必要があります。

 

ちなみにmodels.pyにテーブルを追加したり、編集したらmodels.pyのコードをクリックして「ctrl+s」で保存してから、マイグレーションファイルを作るまたは、上書きする必要があるので、覚えておきましょう。

マイグレーションファイルを作成

マイグレーションファイルを作成する方法は

python manage.py makemigrations

このコマンドで作成することが出来ます。

データベースにテーブルを作成

モデルにテーブルを作成し、マイグレーションファイルを作っても、まだデータベースにテーブルが反映していないので(翻訳しただけなので)作成したマイグレーションファイルをデータベースに反映していきましょう。

python manage.py migrate

反映作業もコマンド一つで、可能です。

 

管理サイト(admin)にアクセスする

次に管理サイトにアクセスしていきましょう。

管理サイトにアクセスする方法は、サーバーを立ち上げてurlディスパクチャを(/admin)にしてアクセスできます。

管理サイトとは?

管理サイトは、モデルに定義したレコードのクラッド(CRUD)をする時に使うサイトです。

Create(クラッド)とは、(登録)、Read(参照)、Update(更新)、Delete(削除)のことです。

 

つまり、管理サイトとはブログでいうと、ブログを書いたり削除したり、編集するサイトのことを指します。

アクセスしたら…

アクセスしたら、ログイン画面がでてくるとおもいます。


ただ、ログイン以前にユーザー登録してないと思うので、ユーザー登録をして、管理者権限を持つ必要があります。

ユーザーを作成

ユーザーを作成する方法は下記のコマンドを実行して

python manage.py createsuperuser

ユーザー名、メールアドレス、パスワードが聞かれるので、メールアドレスは必要ないので、パスワードとユーザー名を登録しましょう。

 

なお、パスワードを入力する際入力しても文字が表示されませんが、入力できているので、きにせずに…

ログイン

では、ユーザー登録ができたら、管理サイトを開いてログインしてみましょう。

 


ログインできたらこのような画面が表示されます。

 

何かおかしな点が…

な、な、なんと!先ほど作成したモデルのレコードか管理サイトなのに触れないじゃありませんか!!

管理サイトからモデル(テーブル)を触れるようにする。

モデルにテーブルを作成したとしても管理サイトでそのテーブルのレコードが触れるわけではないので、設定する必要があります。

 

まず、app名/admin.pyを開いてください。app名/admin.pyで管理サイトからモデル(自分が作ったテーブル)を触れるように設定できます。

 

今回はPostという名前のテーブルを触れるようにしたいので、

 

(app名/admin.py)に

 

from app名.models import  テーブル名

 

admin.site.register(テープル名)

を追加します。

 

追加したらファイルを保存して確認してみましょう。

こうなっていたら成功です!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

~参考記事~

仮想環境: Python環境構築ガイド - python.jp