Antes de iniciar a configuração do projeto, é importante realizar a migração do módulo de clientes criado na primeira fase do curso. Basta apenas copiar e colar as pastas clientes e templates, colocando a pasta templates dentro de clientes.
-
Definir a aplicação no gestao_clietes/settings.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'clientes', ]
-
Apontar as gestao_clietes/urls.py para a aplicação
from django.contrib import admin from django.urls import path, include from clientes import urls as clientes_urls urlpatterns = [ path('clientes/', include(clientes_urls)), path('admin/', admin.site.urls), ]
-
Migrando a aplicação para o banco de dados
(venv) eliabeleal@DESKTOP:~/projetoFinal/gestao_clientes$ python manage.py migrate
-
Fazendo a "gaba" para que os arquivos estáticos de mídia seja renderizado.
Em gestao_clientes/settings.py
MEDIA_URL = '/media/' MEDIA_ROOT = 'media'
Em gestao_clientes/urls.py
from django.conf settings from django.conf.urls.static import static urlpatterns = [ path('clientes/', include(clientes_urls)), path('admin/', admin.site.urls), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Para que as aplicações não seja acessadas por qualquer pessoa, é preciso que haja uma proteção em todas. E para isso o django provê um sistema de login e logout.
-
Em clientes/views.py
Protegendo os métodos com @login_required
from django.contrib.auth.decorators import login_required @login_required def persons_list(request): persons = Person.objects.all() return render(request, 'person.html', {'persons': persons})
-
Em settings.py
Indicando as URLS de login e o redirecionamento depois de logado
LOGIN_URL = '/login/' LOGIN_REDIRECT_URL = 'person_list'
-
Em urls.py
Criando a url de login e logout
from django.contrib.auth import views as auth_views urlpatterns = [ path('login/', auth_views.LoginView.as_view(), name='login'), path('logout/', auth_views.LogoutView.as_view(), name='logout'), ]
No django 2.1 foram removidas (ou melhor movidas) algunas views, entre elas as de login. Que agora são usadas como classes.
-
Em settings.py
Informando qual será a pasta usada para os templates do sistema (não são os da aplicação)
TEMPLATES = [ { 'DIRS': ['templates'], }, ]
-
Em templates/registration/login.html
Importanto o formulário para login já disponibilizado pelo django
<h2>Login</h2> <form method="post"> {% csrf_token %} {{form.as_p}} <button type="submit">Login</button> </form>
-
Em cliente/templates/person.html
Crindo um link para logout
<a href="{% url 'logout' %}">Sair</a>
-
Antes é preciso iniciar uma nova aplicação no projeto que tratará da página inicial
(venv) eliabeleal@DESKTOP:~/projetoFinal/gestao_clientes$ python manage.py startapp home
-
Em settings.py cadastramos a aplicação
INSTALLED_APPS = [ 'clientes', 'home', ]
-
Em gestao_clientes/urls.py criamos uma url vazia e importamos as urls da aplicação home.
from home import urls as home_urls path('', include(home_urls)),
-
Em home/urls.py. Esse arquivo não existe, portanto é preciso criá-lo. Nele direcionamos duas views home e my_logout.
from django.urls import path from .views import home, my_logout urlpatterns = [ path('', home, name='home'), path('logout/', my_logout, name='logout'), ]
-
Em home/views.py. A primeira função está chamando o template home. Já a segunda chama a função logout e depois redireciona para o home
from django.shortcuts import render, redirect from django.contrib.auth import logout def home(request): return render(request, 'home.html') def my_logout(request): logout(request) return redirect('home')
-
Em home/templates/home.html. Aqui temos algumas variáveis e métodos já disponibilizados pelo django
<body> <h1>Seja bem vindo</h1> {% if user.is_authenticated %} <p>Ola {{user.username}}</p> <a href="{% url 'logout' %}">Sair</a> {% else %} <a href="{% url 'login' %}">Entrar</a> {% endif %} </body>
-
Após o download do postgres, é necessário fazer a configuração do settings.py. Nele existe um link para a documentação do django que nos dá a configuração do django para o postegres.
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'gestao_clientes', 'USER': 'postgres', 'PASSWORD': 'labindy', 'HOST': '127.0.0.1', 'PORT': '5432', } }
-
Para fazer a migração das aplicações, é necessário instalar o pip install psycopg2
-
Logo depois pode-se migrar usando o python manage.py migrate
-
Como é um novo banco de dados usando o comando python manage.py createsuperuser criamos um super usuário. Se tudo der "Ok", temos um novo banco de dados em nossa aplicação.
-
Em gestao_clientes/templates.
Herança de templates Criando um arquivo como base para os templates
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> <title>{%block title%}{%endblock%}</title> </head> <body> {%block main%} {%endblock%} </body> </html>
Basta agora importar todos os blocos criados para os demais templates, que eles rederizarão o bootstrap.
-
Nos demais html's, usa-se o extends. Em home/templates/home.html. Para custumizar as demais tags do html, basta usar as classes do bootstrap.
{%extends 'base.html'%} {%block title%}Seja Bem Vindo{%endblock%} {%block main%} <h1>Seja bem vindo</h1> {% if user.is_authenticated %} <p>Ola {{user.username}}</p> <a href="{% url 'logout' %}">Sair</a> {% else %} <a href="{% url 'login' %}">Entrar</a> {% endif %} {%endblock%}