(メモ)Webサイト制作

メモ。コードの校閲すらしていない。

質問

Pythonを用いて、次の3つのページを持つwebサイトを制作する方法を教えてください。
①日記作成。
②予定を追加できるカレンダー。
③Notionと連携したページ。

POEの回答

Pythonを用いて、3つのページを持つWebサイトを制作する方法を以下に示します。Flaskをフレームワークとして使用し、データベースにはSQLiteを利用する例を示します。

準備

  1. Flaskのインストール: pip install Flask Flask-SQLAlchemy requests
  2. プロジェクト構造: /your_project ├── app.py ├── templates │ ├── diary.html │ ├── calendar.html │ └── notion.html └── static └── style.css

1. 日記作成ページ

app.py (Flaskアプリケーション)

from flask import Flask, render_template, request, redirect
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///diary.db'
db = SQLAlchemy(app)

class DiaryEntry(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    date = db.Column(db.String(10), nullable=False)
    entry = db.Column(db.Text, nullable=False)

@app.route('/diary', methods=['GET', 'POST'])
def diary():
    if request.method == 'POST':
        date = request.form['date']
        entry = request.form['entry']
        new_entry = DiaryEntry(date=date, entry=entry)
        db.session.add(new_entry)
        db.session.commit()
        return redirect('/diary')
    entries = DiaryEntry.query.all()
    return render_template('diary.html', entries=entries)

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

templates/diary.html

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
    <title>日記作成</title>
</head>
<body>
    <h1>日記作成</h1>
    <form method="POST">
        <input type="date" name="date" required>
        <textarea name="entry" required></textarea>
        <button type="submit">保存</button>
    </form>
    <div>
        <h2>日記の一覧</h2>
        <ul>
            {% for entry in entries %}
                <li><strong>{{ entry.date }}</strong>: {{ entry.entry }}</li>
            {% endfor %}
        </ul>
    </div>
</body>
</html>

2. 予定を追加できるカレンダーページ

app.py (続き)

@app.route('/calendar', methods=['GET', 'POST'])
def calendar():
    if request.method == 'POST':
        # 予定の保存ロジックをここに追加
        pass
    return render_template('calendar.html')

templates/calendar.html

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/5.11.3/main.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/5.11.3/main.min.css" />
    <title>カレンダー</title>
</head>
<body>
    <h1>予定カレンダー</h1>
    <div id="calendar"></div>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            var calendarEl = document.getElementById('calendar');
            var calendar = new FullCalendar.Calendar(calendarEl, {
                initialView: 'dayGridMonth',
                dateClick: function(info) {
                    // 予定追加処理
                    alert('日付: ' + info.dateStr);
                }
            });
            calendar.render();
        });
    </script>
</body>
</html>

3. Notionと連携したページ

Notion APIの設定

  1. APIキーの取得: NotionのAPIキーを取得し、必要なデータベースのIDを入手。

app.py (続き)

import requests

@app.route('/notion', methods=['GET'])
def notion():
    notion_data = fetch_notion_data()
    return render_template('notion.html', data=notion_data)

def fetch_notion_data():
    url = "https://api.notion.com/v1/databases/YOUR_DATABASE_ID/query"
    headers = {
        "Authorization": "Bearer YOUR_INTEGRATION_TOKEN",
        "Notion-Version": "2021-05-13",
        "Content-Type": "application/json"
    }
    response = requests.post(url, headers=headers)
    return response.json().get('results', [])

templates/notion.html

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
    <title>Notion連携</title>
</head>
<body>
    <h1>Notionデータ</h1>
    <ul>
        {% for item in data %}
            <li>{{ item.properties.Name.title[0].text.content }}</li>
        {% endfor %}
    </ul>
</body>
</html>

アプリケーションの実行

  1. Flaskアプリを実行します。 python app.py
  2. ブラウザで http://127.0.0.1:5000/diary にアクセスして日記作成ページを確認します。

デプロイ

  • HerokuやVercelなどのプラットフォームを使用してサイトをデプロイします。

この方法で、Pythonを使用した日記作成、カレンダー、Notion連携の3つのページを持つWebサイトを構築できます。必要に応じて、機能やデザインをカスタマイズしてください。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す