- Crie uma pasta chamada Projeto
- Abra o terminal na pasta
- Crie o environment "py -m venv env"
- Execute o environment ".\env\Scripts\activate"
- Execute o comando pip para instalar o django "pip install django"
- Inicie um projeto django "django-admin startproject minecraftinventario"
- Execute o comando "cd minecraftinventario"
- Execute o comando pip para instalar o allauth "pip install django-allauth"
- No arquivo settings.py do minecraftinventario
- Importar o allauth "import allauth"
- Adicionar os apps "allauth", "allauth.account", "allauth.socialaccount" em 'INSTALLED_APPS = ['
- Fazer a configuração do allauth adicionando em 'settings.py'
AUTH_USER_MODEL = "users.User"
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
]
SITE_ID = 1
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
LOGIN_REDIRECT_URL = "/"
ACCOUNT_SESSION_REMEMBER = True
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
- Execute o comando pip para instalar o crispyforms "pip install django-crispy-forms"
- No arquivo settings.py do minecraftinventario
- Adicionar o apps "crispy_forms" em 'INSTALLED_APPS = ['
- Fazer a configuração do crispy forms adicionando
CRISPY_TEMPLATE_PACK = "bootstrap4"
- Inicie um novo app django "py manage.py startapp users"
- Inicie um novo app django "py manage.py startapp pages"
- Configurando o template
- Na pasta "Projeto\minecraftinventario"
- Crie uma pasta chamada "templates" e a partir dela será desenvolvido as paginas do sistema
- Na pasta templates
- Crie 2 arquivos, "base.html" & "home.html"
- Crie uma pasta chamada account
- Crie 3 arquivos html "login, logout & signup"
- Os códigos de template podem ser acessados Aqui!
- Crie uma pasta chamada "static" e a partir dela será desenvolvido o 'script' e imagens do sistema
- Os códigos do script pode ser acessado Aqui!
- Faça a configuração no arquivo settings
- realize a importação "import os"
- Fazer a configuração do allauth adicionando
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages"
)
MEDIA_ROOT = 'static/'
RANDOM_IMAGE_DIR = '/item/'
RANDOM_IMAGE_EXTENSIONS = ['.jpg','.jpeg','.png','.gif']
MEDIA_URL = '/img/item/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
- No arquivo 'settings'
- Adicionar o apps "django.contrib.sites", "users.apps.UsersConfig", "pages.apps.PagesConfig" em 'INSTALLED_APPS = ['
- Altere o 'DIRS': [], por "DIRS": [BASE_DIR / "templates"], em 'TEMPLATES = ['
- Utilizando o código já apresentado fazer os metodos de autentificação em
- Projeto\minecraftinventario\minecraftinventario\urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
# Django Admin
path("admin/", admin.site.urls),
# User Management
path("accounts/", include("allauth.urls")),
# Local
path("", include("pages.urls", namespace="pages")),
]
- Projeto\minecraftinventario\pages\urls.py
from django.urls import path
from . import views
app_name = "pages"
urlpatterns = [
path("", views.HomePageView.as_view(), name="home"),
]
- Projeto\minecraftinventario\pages\views.py
from django.views.generic import TemplateView
from django.http import HttpResponse
from django.shortcuts import render
class HomePageView(TemplateView):
template_name = "home.html"
- Projeto\minecraftinventario\pages\apps.py
from django.apps import AppConfig
class PagesConfig(AppConfig):
name = 'pages'
- Projeto\minecraftinventario\users\apps.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
- Projeto\minecraftinventario\users\admin.py
from django.contrib import admin
from django.contrib.auth import admin as auth_admin
from .forms import UserChangeForm, UserCreationForm
from .models import User
@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
form = UserChangeForm
add_form = UserCreationForm
model = User
fieldsets = auth_admin.UserAdmin.fieldsets + (
("Informações Pessoais", {"fields": ("bio",)}),
)
- Projeto\minecraftinventario\users\models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
bio = models.TextField(blank=True
- Projeto\minecraftinventario\users\forms.py
from django.contrib.auth import forms
from .models import User
class UserChangeForm(forms.UserChangeForm):
class Meta(forms.UserChangeForm.Meta):
model = User
class UserCreationForm(forms.UserCreationForm):
class Meta(forms.UserCreationForm.Meta):
model = User
- O arquivo em "Projeto\minecraftinventario\minecraftinventario\settings.py" deve ser semelhante ao apresentado
from pathlib import Path
import os
import allauth
BASE_DIR = Path(__file__).resolve().parent.parent
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = "3dg*3m4!^iu&3bym0f_0h&7_nykish33o_-vgrfv014ltza00g"
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
INSTALLED_APPS = [
# django
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django.contrib.sites",
# 3rd party
"allauth",
"allauth.account",
"allauth.socialaccount",
"crispy_forms",
# local pages
"users.apps.UsersConfig",
"pages.apps.PagesConfig",
]
AUTH_USER_MODEL = "users.User"
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
'whitenoise.middleware.WhiteNoiseMiddleware',
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
ROOT_URLCONF = "minecraftinventario.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR / "templates"],
"APP_DIRS": True,
"OPTIONS": {
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages"
)
WSGI_APPLICATION = "minecraftinventario.wsgi.application"
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
AUTH_PASSWORD_VALIDATORS = [
{
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
},
{
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
},
{
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
},
{
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
},
]
# IMG URL
MEDIA_ROOT = 'static/'
RANDOM_IMAGE_DIR = '/item/'
RANDOM_IMAGE_EXTENSIONS = ['.jpg','.jpeg','.png','.gif']
MEDIA_URL = '/img/item/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
LANGUAGE_CODE = "pt-br"
TIME_ZONE = "UTC"
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'
# Django-allauth
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
]
SITE_ID = 1
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
LOGIN_REDIRECT_URL = "/"
ACCOUNT_SESSION_REMEMBER = True
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = False
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = "email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
# crispy-forms
CRISPY_TEMPLATE_PACK = "bootstrap4"
- Caso exista o arquivo "db.sqlite3" em "Projeto\minecraftinventario" delete-o
- Execute o comando "py manage.py migrate"
- Na pasta "Projects\Projeto\minecraftinventario\users"
- Crie uma pasta chamada "templatestags" e a partir dela será desenvolvido as funções do sistema
- Crie um arquivo chamado "__init__.py" este arquivo deve ser vazio
- Crie as funções necessárias
- random_image.py
import os
import random
from django import template
from django.conf import settings
register = template.Library()
@register.simple_tag
def random_image(image_dir):
try:
valid_extensions = settings.RANDOM_IMAGE_EXTENSIONS
except AttributeError:
valid_extensions = ['.jpg','.jpeg','.png','.gif',]
if image_dir:
rel_dir = image_dir
else:
rel_dir = settings.RANDOM_IMAGE_DIR
rand_dir = os.path.join(settings.MEDIA_ROOT, rel_dir)
files = [f for f in os.listdir(rand_dir) if os.path.splitext(f)[1] in valid_extensions]
return os.path.join(rel_dir, random.choice(files))
- random_numbers.py
import random
from django import template
register = template.Library()
# Para gerar o numero aleatorio para a meta
@register.simple_tag
def random_int():
randomnumber = random.randint(15, 50)
return randomnumber
# Usado para qualquer estrutura de repetição
@register.filter(name='times')
def times(number):
return range(number)
- Execute o servidor "py manage.py runserver"