Commit fcce7437 by Beatryz Chagas

Atualizacão do CineVerse

parent 1e8e1644
from flask import Flask, render_template
from flask import Flask, render_template, request, redirect
import sqlite3
app = Flask(__name__)
# Criar banco de dados
def criar_banco():
conexao = sqlite3.connect('database.db')
cursor = conexao.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS filmes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titulo TEXT NOT NULL,
genero TEXT NOT NULL,
nota REAL,
ano INTEGER,
tipo TEXT,
link TEXT
)
''')
conexao.commit()
conexao.close()
criar_banco()
# HOME
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
app.run(debug=True)
\ No newline at end of file
conexao = sqlite3.connect('database.db')
cursor = conexao.cursor()
cursor.execute('SELECT * FROM filmes')
filmes = cursor.fetchall()
conexao.close()
return render_template('index.html', filmes=filmes)
# CADASTRAR
@app.route('/cadastrar', methods=['GET', 'POST'])
def cadastrar():
if request.method == 'POST':
titulo = request.form['titulo']
genero = request.form['genero']
nota = request.form['nota']
ano = request.form['ano']
tipo = request.form['tipo']
link = request.form['link']
conexao = sqlite3.connect('database.db')
cursor = conexao.cursor()
cursor.execute('''
INSERT INTO filmes
(titulo, genero, nota, ano, tipo, link)
VALUES (?, ?, ?, ?, ?, ?)
''', (titulo, genero, nota, ano, tipo, link))
conexao.commit()
conexao.close()
return redirect('/')
return render_template('cadastrar.html')
# EDITAR
@app.route('/editar/<int:id>', methods=['GET', 'POST'])
def editar(id):
conexao = sqlite3.connect('database.db')
cursor = conexao.cursor()
if request.method == 'POST':
titulo = request.form['titulo']
genero = request.form['genero']
nota = request.form['nota']
ano = request.form['ano']
tipo = request.form['tipo']
link = request.form['link']
cursor.execute('''
UPDATE filmes
SET titulo = ?,
genero = ?,
nota = ?,
ano = ?,
tipo = ?,
link = ?
WHERE id = ?
''', (titulo, genero, nota, ano, tipo, link, id))
conexao.commit()
conexao.close()
return redirect('/')
cursor.execute(
'SELECT * FROM filmes WHERE id = ?',
(id,)
)
filme = cursor.fetchone()
conexao.close()
return render_template('editar.html', filme=filme)
# EXCLUIR
@app.route('/excluir/<int:id>')
def excluir(id):
conexao = sqlite3.connect('database.db')
cursor = conexao.cursor()
cursor.execute(
'DELETE FROM filmes WHERE id = ?',
(id,)
)
conexao.commit()
conexao.close()
return redirect('/')
app.run(debug=True)
\ No newline at end of file
File added
Flask
\ No newline at end of file
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
body{
background-color: #141414;
/* Configurações Globais */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-color: #0b090a; /* Preto profundo */
color: #ffffff;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
overflow-x: hidden;
}
/* Barra de Navegação */
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 5%;
background-color: rgba(11, 9, 10, 0.95);
border-bottom: 2px solid #3c096c; /* Detalhe em linha roxa */
position: sticky;
top: 0;
z-index: 100;
}
.logo-container {
display: flex;
align-items: center;
gap: 12px;
}
.logo-img {
height: 45px;
width: auto;
border-radius: 50%;
border: 2px solid #9d4edd; /* Borda roxa brilhante na logo */
}
.logo-texto {
color: #e0aaff;
font-size: 24px;
font-weight: bold;
letter-spacing: 1px;
text-shadow: 0 0 8px rgba(157, 78, 221, 0.6);
}
.btn-nav {
background-color: #7b2cbf;
color: white;
font-family: Arial;
text-align: center;
margin-top: 100px;
text-decoration: none;
padding: 10px 20px;
border-radius: 6px;
font-weight: bold;
transition: all 0.3s ease;
box-shadow: 0 0 10px rgba(123, 44, 191, 0.4);
}
.btn-nav:hover {
background-color: #9d4edd;
transform: translateY(-2px);
box-shadow: 0 0 15px rgba(157, 78, 221, 0.8);
}
/* Banner da Home */
.banner-principal {
height: 35vh;
background: linear-gradient(to top, #0b090a 0%, rgba(60, 9, 108, 0.3) 100%);
display: flex;
align-items: center;
padding: 0 5%;
border-bottom: 1px solid #240046;
}
.banner-conteudo h1 {
font-size: 42px;
color: #e0aaff;
margin-bottom: 10px;
}
.banner-conteudo p {
color: #c8b6ff;
font-size: 16px;
max-width: 600px;
}
/* Container do Catálogo */
.catalogo-container {
padding: 40px 5%;
}
.catalogo-container h2 {
font-size: 24px;
margin-bottom: 25px;
border-left: 5px solid #9d4edd;
padding-left: 12px;
color: #fff;
}
.sem-filmes {
color: #b1a7a6;
font-style: italic;
font-size: 16px;
margin-top: 20px;
}
/* Grade e Cards de Filmes */
.grade-filmes {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 25px;
}
.card-filme {
background-color: #161a1d;
border-radius: 8px;
overflow: hidden;
border: 1px solid #240046;
transition: all 0.3s ease;
}
.card-filme:hover {
transform: scale(1.04);
border-color: #9d4edd;
box-shadow: 0 10px 20px rgba(157, 78, 221, 0.3);
}
h1{
color: red;
.capa-fake {
height: 180px;
background: linear-gradient(135deg, #3c096c 0%, #10002b 100%);
display: flex;
justify-content: center;
align-items: center;
font-size: 50px;
}
.info-filme {
padding: 15px;
}
.info-filme h3 {
font-size: 18px;
color: #fff;
margin-bottom: 8px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.info-filme .genero {
display: block;
font-size: 13px;
color: #c8b6ff;
margin-bottom: 10px;
}
.meta-info {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 13px;
margin-bottom: 15px;
}
.info-filme .ano {
color: #b1a7a6;
}
.info-filme .nota {
background-color: #5a189a;
padding: 3px 8px;
border-radius: 4px;
font-weight: bold;
color: #fff;
}
/* Ações dos Cards */
.acoes-card {
display: flex;
gap: 10px;
}
.btn-editar, .btn-excluir {
flex: 1;
text-align: center;
padding: 6px 0;
border-radius: 4px;
text-decoration: none;
font-size: 12px;
font-weight: bold;
color: white;
transition: background 0.2s;
}
.btn-editar { background-color: #3c096c; }
.btn-editar:hover { background-color: #7b2cbf; }
.btn-excluir { background-color: #222; }
.btn-excluir:hover { background-color: #9b2226; }
/* DESIGN LINDO DA TELA DE CADASTRO */
.body-formulario {
background: radial-gradient(circle at center, #1e0b36 0%, #0b090a 100%);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 20px;
}
.formulario-container {
background-color: #110e14;
border: 1px solid #5a189a;
padding: 40px;
border-radius: 12px;
width: 100%;
max-width: 550px;
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.7), 0 0 30px rgba(123, 44, 191, 0.2);
}
.topo-form {
margin-bottom: 20px;
}
.btn-voltar {
color: #b1a7a6;
text-decoration: none;
font-size: 14px;
transition: color 0.2s;
}
.btn-voltar:hover { color: #e0aaff; }
.formulario-container h1 {
color: #e0aaff;
font-size: 28px;
margin-bottom: 6px;
}
.subtitulo-form {
color: #b1a7a6;
font-size: 14px;
margin-bottom: 30px;
}
.campo-grupo {
margin-bottom: 20px;
}
.dobro-campos {
display: flex;
gap: 20px;
}
.dobro-campos .campo-grupo {
flex: 1;
}
.formulario-container label {
display: block;
color: #c8b6ff;
font-size: 14px;
margin-bottom: 8px;
font-weight: 500;
}
.formulario-container input {
width: 100%;
padding: 12px 16px;
background-color: #161a1d;
border: 1px solid #3c096c;
color: white;
border-radius: 6px;
font-size: 15px;
transition: all 0.3s ease;
}
.formulario-container input:focus {
border-color: #9d4edd;
box-shadow: 0 0 8px rgba(157, 78, 221, 0.5);
outline: none;
background-color: #1f1f23;
}
.btn-salvar {
width: 100%;
background-color: #7b2cbf;
color: white;
border: none;
padding: 14px;
border-radius: 6px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
margin-top: 10px;
box-shadow: 0 4px 15px rgba(123, 44, 191, 0.3);
}
.btn-salvar:hover {
background-color: #9d4edd;
box-shadow: 0 6px 20px rgba(157, 78, 221, 0.6);
transform: translateY(-1px);
}
.formulario-container select {
width: 100%;
padding: 12px 16px;
background-color: #161a1d;
border: 1px solid #3c096c;
color: white;
border-radius: 6px;
font-size: 15px;
}
.formulario-container select:focus {
border-color: #9d4edd;
outline: none;
}
.btn-assistir {
width: 100%;
text-align: center;
background-color: #9d4edd;
color: white;
text-decoration: none;
padding: 8px 0;
border-radius: 4px;
font-size: 13px;
font-weight: bold;
transition: 0.3s;
}
.btn-assistir:hover {
background-color: #c77dff;
}
.capa-filme {
width: 100%;
height: 250px;
object-fit: cover;
}
\ No newline at end of file
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cadastrar Filme - CineVerse</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body class="body-formulario">
<div class="formulario-container">
<div class="topo-form">
<a href="/" class="btn-voltar">← Voltar para a Home</a>
</div>
<h1>🍿 Adicionar Novo Filme</h1>
<p class="subtitulo-form">Preencha os dados abaixo para avaliar e salvar o filme no seu catálogo.</p>
<form action="/cadastrar" method="POST">
<div class="campo-grupo">
<label for="nome">Nome do Filme</label>
<input type="text" id="nome" name="titulo" placeholder="Ex: Homem-Aranha" required>
</div>
<div class="campo-grupo">
<label for="genero">Gênero</label>
<input type="text" id="genero" name="genero" placeholder="Ex: Ação / Aventura" required>
</div>
<div class="dobro-campos">
<div class="campo-grupo">
<label for="ano">Ano de Lançamento</label>
<input type="number" id="ano" name="ano" placeholder="Ex: 2026" required>
</div>
<div class="campo-grupo">
<label for="nota">Sua Nota (0 a 10)</label>
<input type="number" id="nota" name="nota" step="0.1" min="0" max="10" placeholder="Ex: 9.5" required>
</div>
<div class="campo-grupo">
<label for="tipo">Tipo</label>
<select id="tipo" name="tipo" required>
<option value="filme">🎬 Filme</option>
<option value="serie">📺 Série</option>
</select>
</div>
<div class="campo-grupo">
<label for="link">Link do Filme/Série</label>
<input
type="text"
id="link"
name="link"
placeholder="Cole o link aqui"
required
>
</div>
</div>
<button type="submit" class="btn-salvar">✨ Salvar no Catálogo</button>
</form>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Editar Filme</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body class="body-formulario">
<div class="formulario-container">
<h1>✏️ Editar Filme</h1>
<form method="POST">
<div class="campo-grupo">
<label>Título</label>
<input type="text" name="titulo" value="{{ filme[1] }}" required>
</div>
<div class="campo-grupo">
<label>Gênero</label>
<input type="text" name="genero" value="{{ filme[2] }}" required>
</div>
<div class="campo-grupo">
<label>Nota</label>
<input type="number" step="0.1" name="nota" value="{{ filme[3] }}" required>
</div>
<div class="campo-grupo">
<label>Ano</label>
<input type="number" name="ano" value="{{ filme[4] }}" required>
</div>
<div class="campo-grupo">
<label>Tipo</label>
<select name="tipo">
<option value="filme" {% if filme[5] == 'filme' %}selected{% endif %}>
Filme
</option>
<option value="serie" {% if filme[5] == 'serie' %}selected{% endif %}>
Série
</option>
</select>
</div>
<div class="campo-grupo">
<label>Link</label>
<input type="text" name="link" value="{{ filme[6] }}" required>
</div>
<button type="submit" class="btn-salvar">
Salvar Alterações
</button>
</form>
</div>
</body>
</html>
\ No newline at end of file
......@@ -2,13 +2,56 @@
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CineVerse</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<h1>🎬 CineVerse</h1>
<p>Seu catálogo de filmes e séries.</p>
<header class="navbar">
<div class="logo-container">
<img src="/static/logo.png.jpeg" alt="CineVerse Logo" class="logo-img">
<span class="logo-texto">CineVerse</span>
</div>
<a href="/cadastrar" class="btn-nav">⚡ Cadastrar Filme</a>
</header>
<section class="banner-principal">
<div class="banner-conteudo">
<h1>Bem-vindo ao CineVerse</h1>
<p>Seu catálogo personalizado de filmes e séries. Guarde suas produções favoritas em um universo roxo exclusivo.</p>
</div>
</section>
<main class="catalogo-container">
<h2>Filmes Adicionados</h2>
<div class="grade-filmes">
{% for filme in filmes %}
<div class="card-filme">
{% if filme[5] == 'filme' %}
<img src="/static/filme.jpg" class="capa-filme">
{% else %}
<img src="/static/serie.jpg" class="capa-filme">
{% endif %}
<div class="info-filme">
<h3>{{ filme[1] }}</h3> <span class="genero">🎭 {{ filme[2] }}</span> <div class="meta-info">
<span class="ano">📅 {{ filme[4] }}</span> <span class="nota">⭐ {{ filme[3] }}/10</span> </div>
<div class="acoes-card">
<a href="/editar/{{ filme[0] }}" class="btn-editar">✏️ Editar</a>
<a href="/excluir/{{ filme[0] }}" class="btn-excluir" onclick="return confirm('Tem certeza que deseja excluir?')">❌ Excluir</a>
<a href="{{ filme[6] }}" target="_blank" class="btn-assistir">
▶ Assistir
</a>
</div>
</div>
</div>
{% else %}
<p class="sem-filmes">Nenhum filme cadastrado ainda. Clique em "Cadastrar Filme" no topo para começar seu catálogo!</p>
{% endfor %}
</div>
</main>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment