2
respostas

Faça como eu fiz: concluindo o CRUD

Arquivo jogoteca.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_pyfile('config.py')

db = SQLAlchemy(app)

from views import *

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

Arquivo models.py:

from jogoteca import db

class Jogos(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    nome = db.Column(db.String(50), nullable=False)
    categoria = db.Column(db.String(40), nullable=False)
    console = db.Column(db.String(20), nullable=False)

    def __repr__(self):
        return '<Name %r>' % self.name


class Usuarios(db.Model):
    nickname = db.Column(db.String(8), primary_key=True)
    nome = db.Column(db.String(20), nullable=False)
    senha = db.Column(db.String(100), nullable=False)

    def __repr__(self):
        return '<Name %r>' % self.name

Arquivo views.py

from flask import render_template, request, redirect, session, flash, url_for
from jogoteca import app, db
from models import Jogos, Usuarios

@app.route('/')
def index():
    lista = Jogos.query.order_by(Jogos.id)
    return render_template('lista.html', titulo='Jogos', jogos=lista)

@app.route('/novo')
def novo():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('novo')))
    return render_template('novo.html', titulo='Novo Jogo')

@app.route('/criar', methods=['POST',])
def criar():
    nome = request.form['nome']
    categoria = request.form['categoria']
    console = request.form['console']

    jogo = Jogos.query.filter_by(nome=nome).first()

    if jogo:
        flash('Jogo já existente!')
        return redirect(url_for('index'))

    novo_jogo = Jogos(nome=nome, categoria=categoria, console=console)
    db.session.add(novo_jogo)
    db.session.commit()

    return redirect(url_for('index'))

@app.route('/editar/<int:id>')
def editar(id):
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('editar')))
    jogo = Jogos.query.filter_by(id=id).first()
    return render_template('editar.html', titulo='Editando Jogo', jogo=jogo)

@app.route('/atualizar', methods=['POST',])
def atualizar():
   jogo = Jogos.query.filter_by(id=request.form['id']).first()
   jogo.nome = request.form['nome']
   jogo.categoria = request.form['categoria']
   jogo.console = request.form['console']

   db.session.add(jogo)
   db.session.commit()

   return redirect(url_for('index'))

@app.route('/deletar/<int:id>')
def deletar(id):
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login'))

    Jogos.query.filter_by(id=id).delete()
    db.session.commit()
    flash('Jogo deletado com sucesso')
    return redirect(url_for('index'))

@app.route('/login')
def login():
    proxima = request.args.get('proxima')
    return render_template('login.html', proxima=proxima)

@app.route('/autenticar', methods=['POST',])
def autenticar():
    usuario = Usuarios.query.filter_by(nickname=request.form['usuario']).first()
    if usuario:
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname
            flash(usuario.nickname + ' logado com sucesso!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)
    else:
        flash('Usuário não logado.')
        return redirect(url_for('login'))

@app.route('/logout')
def logout():
    session['usuario_logado'] = None
    flash('Logout efetuado com sucesso!')
    return redirect(url_for('index'))

Arquivo config.py:

SECRET_KEY = 'alura'

SQLALCHEMY_DATABASE_URI = \
    '{SGBD}://{usuario}:{senha}@{servidor}/{database}'.format(
        SGBD = 'mariadb+mariadbconnector',
        usuario = 'admin',
        senha = '',
        servidor = 'localhost',
        database = 'jogoteca'
    )
2 respostas

Continuação:

Página lista.html:

{% extends "template.html" %}
{% block conteudo %}
        <table class="table table-striped table-responsive table-bordered">
            <thead class="thead-default">
                <tr>
                    <th>Nome</th>
                    <th>Categoria</th>
                    <th>Console</th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                {% for jogo in jogos %}
                <tr>
                    <td>{{ jogo.nome }}</td>
                    <td>{{ jogo.categoria }}</td>
                    <td>{{ jogo.console }}</td>
                    <td>
                        <a href ="{{ url_for('editar', id=jogo.id) }}">Editar</a>
                        <a href ="{{ url_for('deletar', id=jogo.id) }}">Deletar</a>
                    </td>
                </tr>
                {% endfor %}

            </tbody>
        </table>
{% endblock %}

Página editar.html:

{% extends "template.html" %}
{% block conteudo %}
<form action="{{ url_for('atualizar') }}" method="post">
    <fieldset>
        <input type="hidden" name="id" value="{{ jogo.id }}">
        <div class="form-group">
            <label for="nome">Nome</label>
            <input type="text" id="nome" name="nome" class="form-control"
                   value="{{ jogo.nome }}">
        </div>
        <div class="form-group">
            <label for="categoria">Categoria</label>
            <input type="text" id="categoria" name="categoria" class="form-control"
                   value="{{ jogo.categoria }}">
        </div>
        <div class="form-group">
            <label for="console">Console</label>
            <input type="text" id="console" name="console" class="form-control"
                   value="{{ jogo.console }}">
        </div>
        <button type="submit" class="btn btn-primary btn-salvar">Salvar</button>
    </fieldset>
</form>
{% endblock %}

Olá Anderson, tudo bem com você?

Obrigado por compartilhar seu código e aprendizado com a comunidade Alura. Continue se dedicando e se empenhando nas aulas. Em caso de dúvidas não hesite em voltar ao Fórum.

Fico à disposição. Abraços e bons estudos!