CRUD 기능 만들기
                                            
                                                
                                                
                                                
                                                
                                                
                                                 10788 단어  Python3Flask파이썬sqlite3sqlalchemy
                    

소개
Flask를 사용하여 1에서 응용 프로그램을 만들고 필요한 기술을 배울 수 있도록 정리하고 있습니다.
CRUD란?
CRUD는 Create, Read, Update, Delete 각각의 이니셜을 찍은 것입니다.
이번에 작성한 블로그 애플리케이션에서는 다음과 같습니다.
CRUD를 충족하여 한 가지 기능을 만들 수 있습니다. 이번 기능을 다른 어플리케이션을 작성할 때에도 응용할 수 있습니다.
Create
블로그 투고 화면 작성
src/templates/layout.html
<div class="collapse navbar-collapse" id="navbarNav">
  <ul class="nav navbar-nav navbar-lighy">
    {% if not session.logged_in %}
    <li class="nav-item">
      <a class="nav-link" href="{{ url_for('login') }}">LogIn</a>
    </li>
    {% else %}
    <li class="nav-item">
      <a class="nav-link" href="{{ url_for('new_add') }}">新規登録</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="{{ url_for('logout') }}">Logout</a>
    </li>
    {% endif %}
  </ul>
</div>
src/templates/new.htnl
{% extends "./layout.html" %}
{% block body %}
<form action="{{ url_for('add_entry') }}" method=post class=add-entry>
    <div class=form-group>
        <label for="InputTitle">タイトル</label>
        <input type="text" class="form-control" id="InputTitle" name=title>
    </div>
    <div class="form-group">
        <label for="InputText">本文</label>
        <textarea name=text id="InputText" rows="10" class="form-control"></textarea>
    </div>
    <button type="submit" class="btn btn-primary">作成</button>
</form>
{% endblock %}
블로그 게시 기능 작성
src/views.py
from src import app, db
from flask import flash
from flask import redirect
from flask import request
from flask import render_template
from flask import url_for
from flask import session
from src.domains.entry import Entry
User = {
    'username': 'test',
    'password': 'testpass'
}
@app.route('/')
def index():
    if not session.get('logged_in'):
        return redirect('/login')
    return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        if request.form['username'] != User['username']:
            flash(f'ユーザ名が異なります')
        elif request.form['password'] != User['password']:
            flash(f'パスワードが異なります')
        else:
            session['logged_in'] = True
            flash('ログインしました')
            return redirect('/')
    return render_template('login.html')
@app.route('/logout', methods=['GET'])
def logout():
    session.pop('logged_in', None)
    flash('ログアウトしました')
    return redirect('/')
@app.route('/new_add', methods=['GET','POST'])
def new_add():
    return render_template('/new.html')
@app.route('/add_entry', methods=['POST'])
def add_entry():
    if not session.get('logged_in'):
        return redirect(url_for('login'))
    entry = Entry(
        title = request.form['title'],
        text = request.form['text'])
    db.session.add(entry)
    db.session.commit()
    flash('新しく記事が作成されました')
    return redirect(url_for('index'))
읽기
목록 기능
src/templates/index.html
{% extends "./layout.html" %}
{% block body %}
{% for entry in entries %}
<ul class="card">
    <div class="card-body">
        <h5 class="card-title">
            <a href="{{ url_for('show_entry', id=entry.id) }}">{{ entry.title }}</a>
        </h5>
    </div>
</ul>
{% else %}
投稿がありません
{% endfor %}
{% endblock %}
src/views.py
@app.route('/')
def index():
    if not session.get('logged_in'):
        return redirect('/login')
    entries = Entry.query.order_by(Entry.id.desc()).all()
    return render_template('index.html', entries=entries)

고급 기능
src/views.py
@app.route('/entry/<int:id>', methods=['GET'])
def show_entry(id):
    if not session.get('logged_in'):
        return redirect(url_for('login'))
    entry = Entry.query.get(id)
    return render_template('show.html', entry=entry)
src/templates/show.html
{% extends "./layout.html" %}
{% block body %}
<h2>{{ entry.title }}</h2>
<br />
{{ entry.text }}
<br /><br />
投稿日時:{{ entry.create_at }}
{% endblock %}

업데이트
src/templates/show.html
{% extends "./layout.html" %}
{% block body %}
<h2>{{ entry.title }}</h2>
<br />
{{ entry.text }}
<br /><br />
投稿日時:{{ entry.create_at }}
<br /><br />
<div class="btn-group">
    <form action="{{ url_for('edit_entry', id=entry.id) }}" method="GET">
        <button type="submit" class="btn btn-secondary">Edit</button>
    </form>
</div>
{% endblock %}
src/templates/edit.html
{% extends "./layout.html" %}
{% block body %}
<form action="{{ url_for('update_entry', id=entry.id) }}" method="POST" class="add-entry">
    <div class="form-group">
        <label>タイトル</label>
        <input type="text" class="form-control" name="title" value={{ entry.title}}>
    </div>
    <div class="form-group">
        <label>本文</label>
        <textarea class="form-control" name="text" cols="100" rows="3">{{ entry.text | safe }}</textarea>
    </div>
    <button type="submit" class="btn btn-primary">Update</button>
</form>
{% endblock %}
src.views.py
@app.route('/entry/<int:id>/edit', methods=['GET'])
def edit_entry(id):
    if not session.get('logged_in'):
        return redirect(url_for('login'))
    entry = Entry.query.get(id)
    return render_template('edit.html', entry=entry)
@app.route('/entry/<int:id>/update', methods=['POST'])
def update_entry(id):
    if not session.get('logged_in'):
        return redirect(url_for('login'))
    entry = Entry.query.get(id)
    entry.title = request.form['title']
    entry.text = request.form['text']
    db.session.merge(entry)
    db.session.commit()
    flash('記事が更新されました')
    return redirect(url_for('index'))
 
  
 Delete
src/templates/show.html
{% extends "./layout.html" %}
{% block body %}
<h2>{{ entry.title }}</h2>
<br />
{{ entry.text }}
<br /><br />
投稿日時:{{ entry.create_at }}
<br /><br />
<div class="btn-group">
    <form action="{{ url_for('edit_entry', id=entry.id) }}" method="GET">
        <button type="submit" class="btn btn-secondary">Edit</button>
    </form>
    <form action="{{ url_for('delete_entry', id=entry.id) }}" method="POST">
        <button type="submit" class="btn btn-danger" style="margin-left:5px">Delete</button>
    </form>
</div>
{% endblock %}
src/views.py
@app.route('/entry/<int:id>/delete', methods=['POST'])
def delete_entry(id):
    if not session.get('logged_in'):
        return redirect(url_for('login'))
    entry = Entry.query.get(id)
    db.session.delete(entry)
    db.session.commit()
    flash('投稿が削除されました')
    return redirect(url_for('index'))
 
  
 Reference
이 문제에 관하여(CRUD 기능 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k_yokozuka/items/6b67b25e541ae4af6fe3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)