Q&A
FlaskでIPアドレス管理台帳アプリを作成中です。
登録されたIPアドレスを削除する前に、未使用のIPアドレスを保存しているテーブル(freeipテーブル)へ
追加した後に、削除を実行したいのですが、この処理をどの様にすればよいのか分からない状態です。
具体的には、以下の部分です。
ご教示の程、よろしくお願い致します。
python
1# app.py抜粋 2 3@app.route('/delete/<int:id>') 4def delete(id): 5 6 # ipredgeテーブル内の削除対象idを取得 7 ipredg = Ipredg.query.get(id) 8 9 # ipredgeテーブルから削除データをfreeipテーブルに登録するため、それぞれのデーターを取得しておく 10 ipredg.ip = request.get('ip') 11 ipredg.mac = request.get('mac') 12 ipredg.hostname = request.get('hostname') 13 ipredg.remark = request.get('remark') 14 15 # ipredgeテーブルから削除したデーターをfreeipテーブルへ登録 16 # ここから、freeipテーブルに、どうやって追加すれば良いのか? 17 db.session.add() 18 19 # ipreddgeテーブルから、削除ボタンを押したデーターを削除 20 db.session.delete(ipredg) 21 db.session.commit() 22 return redirect('/') 23
python
1# app.py 2 3from datetime import datetime 4 5from flask import Flask, render_template, request, redirect, url_for 6from flask_sqlalchemy import SQLAlchemy 7import os 8 9 10app = Flask(__name__) 11key = os.urandom(21) 12app.secret_key = key 13 14app.config['SECRET_KEY'] = 'mysecretkey' 15URI = 'sqlite:///ip.db' 16app.config['SQLALCHEMY_DATABASE_URI'] = URI 17app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 18db = SQLAlchemy(app) 19 20 21from sqlalchemy.engine import Engine 22from sqlalchemy import event 23 24@event.listens_for(Engine, "connect") 25def set_sqlite_pragma(dbapi_connection, connection_record): 26 cursor = dbapi_connection.cursor() 27 cursor.execute("PRAGMA foreign_keys=ON") 28 cursor.close() 29 30 31class Ipredg(db.Model): 32 __tablename__='ipreg' 33 id = db.Column(db.Integer, primary_key=True) 34 ip = db.Column(db.String(20)) 35 mac = db.Column(db.String(20)) 36 hostname = db.Column(db.String(50)) 37 remark = db.Column(db.String(50)) 38 39 def __init__(self, ip, mac, hostname, remark): 40 self.ip = ip 41 self.mac = mac 42 self.hostname = hostname 43 self.remark = remark 44 45 46class Freeip(db.Model): 47 __tablename__='freeip' 48 f_id = db.Column(db.Integer, primary_key=True) 49 f_ip = db.Column(db.String(20)) 50 f_mac = db.Column(db.String(20)) 51 f_hostname = db.Column(db.String(50)) 52 f_remark = db.Column(db.String(50)) 53 54 def __init__(self, f_ip, f_mac, f_hostname, f_remark): 55 self.f_ip = f_ip 56 self.f_mac = f_mac 57 self.f_hostname = f_hostname 58 self.f_remark = f_remark 59 60 61@app.cli.command('initialize_DB') 62def initialize_DB(): 63 db.create_all() 64 65@app.route('/') 66def index(): 67 ipredg = Ipredg.query.all() 68 return render_template('index.html', ipredg=ipredg) 69 70@app.route('/free') 71def free(): 72 free_ip = Freeip.query.all() 73 return render_template('freeip.html', free_ip=free_ip) 74 75@app.route('/delete/<int:id>') 76def delete(id): 77 78 # ipredgeテーブル内の削除対象idを取得 79 ipredg = Ipredg.query.get(id) 80 81 # ipredgeテーブルから削除データをfreeipテーブルに登録するため、それぞれのデーターを取得しておく 82 ipredg.ip = request.get('ip') 83 ipredg.mac = request.get('mac') 84 ipredg.hostname = request.get('hostname') 85 ipredg.remark = request.get('remark') 86 87 # ipredgeテーブルから削除したデーターをfreeipテーブルへ登録 88 # ここから、freeipテーブルに、どうやって追加すれば良いのか? 89 db.session.add() 90 91 # ipreddgeテーブルから、削除ボタンを押したデーターを削除 92 db.session.delete(ipredg) 93 db.session.commit() 94 return redirect('/') 95 96 97if __name__ == '__main__': 98 app.run(debug=True) 99
html
1<!-- index.html --> 2{% extends 'base.html' %} 3 4{% block content %} 5<h1>登録一覧画面</h1> 6<table class="table table-striped"> 7 <tr> 8 <th>#</th> 9 <th>IP Address</th> 10 <th>Mac Address</th> 11 <th>Hostname</th> 12 <th>備考</th> 13 </tr> 14 {% for list in ipredg %} 15 <tr> 16 <td> 17 <a href="update/{{list.id}}" role="button">更新</a> 18 <a href="delete/{{list.id}}" role="button">削除</a> 19 </td> 20 <td>{{list.ip}}</td> 21 <td>{{list.mac}}</td> 22 <td>{{list.hostname}}</td> 23 <td>{{list.remark}}</td> 24 </tr> 25 {% endfor %} 26 27</table> 28 29{% endblock %} 30
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/01/23 06:57
2023/01/24 12:14