Try   HackMD

Apostila Python 3.8.2 Django

  • visual code
  • instalar plugins
    • phyton para vc code
    • kite phyton
    • linting, debbugi phyton
  • baixar e instalar o phyton
  • instalar sem colocar email
  • marcar automaticamente
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
python -m pip install Django

NO LINUX:

sudo apt-get install python3.7
sudo apt-get install python3-pip

python3 -V
pip3 -V

pip3 install Django
django-admin --version

ATUALIZANDO A VERSAO DO PIP3

pip3 install --upgrade pip

https://tecadmin.net/install-django-on-ubuntu/

Step 3 – Create A Django Application
cd /var/www
django-admin startproject testedom

cd django_app
python3 manage.py migrate

Step 4 – Create Super User
python3 manage.py createsuperuser

Step 5 – Run Django Application
vi django_app/settings.py
ALLOWED_HOSTS = ['192.168.1.239']
python3 manage.py runserver 0.0.0.0:8000
http://192.168.1.239:8000

sh pycharm.sh

NO PYCHARM:

CRIANDO PROJETO
https://www.treinaweb.com.br/blog/criando-o-primeiro-projeto-django/

COMANDO PARA RODAR O DJANGO
python manage.py runserver

RODA NESSA PORTA
http://127.0.0.1:8000/


https://tutorial.djangogirls.org/pt/django_models/
python manage.py startapp blog
criar classe modelo
python manage.py makemigrations blog - criando banco
python manage.py migrate blog - criar as tabelas
alterar admin.py
python manage.py runserver

NO DIRETORIO DO PYCHARM 26-04-2020

CRIAR PROJETO DJANGO

Rodar no terminal:
django-admin startproject testedom

abrir o Pycharm nesse diretorio

COMANDO PARA RODAR O DJANGO
python manage.py runserver


NO WINDOWS

https://medium.com/horadecodar/instalando-django-2-1-e-criando-um-projeto-windows-e-linux-67cbff58496c

CRIAR A ENV

python -m venv myvenv
myvenv\Scripts\activate

python -m pip install upgrade pip
criar requirements.txt
escrever nele Django~=3.0.5
pip install -r requirements.txt
myvenv\Scripts\activate

django-admin.exe startproject mysite .
python manage.py migrate

python manage.py startapp blog
classe models
python manage.py makemigrations blog
manage.py migrate blog

https://docs.djangoproject.com/en/3.0/intro/tutorial01/
django-admin startproject mysite
python manage.py startapp polls


OUTRA FORMA NO WINDOWS:

https://docs.python.org/pt-br/3/tutorial/venv.html

Criar um diretorio, entrar nele e dar os comandos pelo PowerShell administrador

python3 -m venv tutorial-env
tutorial-env\Scripts\activate.bat


Digitar no terminal:

python


Dando o mesmo comando pelo terminal do Visual Code


Abrir um outro terminal e instalar as bibliotecas:
:point_right: (Digitar tudo numa linha só)

pip install django djangorestframework markdown 
django-filter django-cors-headers


Para listar as biblotecas instaladas:

pip freeze 


Estrutura do diretorio:




Com o Django instalado vamos iniciar o projeto.

django-admin startproject projeto_belem


Entrar no diretorio

cd projeto_belem


Criar o projeto alunos

django-admin startapp alunos

Comando Migrate para o django criar as nossas tabelas do DB

python manage.py migrate


Criar um usuário para acessar o Django

python manage.py createsuperuser

Exemplo:
Usuario: Belem
Senha: 1234


Iniciar o servidor

python manage.py runserver


Visualizando no browser


Logando como administrador:
http://127.0.0.1:8000/admin


Logando com usuario: Belem e senha: 1234


Logado


Em projeto_belem/projeto_belem/settings.py vamos configurar os INSTALLED_APPS.

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'alunos', 'rest_framework' ]


Em alunos/models.py

from django.db import models class Aluno(models.Model): nome = models.CharField(max_length=200) curso = models.CharField(max_length=200) data_nasc = models.PositiveSmallIntegerField() matricula = models.BooleanField(default=True)

Realizamos as migrations

python manage.py makemigrations



0001_initial.py

Gerado automaticamente

# Generated by Django 3.0.5 on 2020-05-04 14:29 from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Aluno', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('nome', models.CharField(max_length=200)), ('curso', models.CharField(max_length=200)), ('data_nasc', models.PositiveSmallIntegerField()), ('matricula', models.BooleanField(default=True)), ], ), ]

Migrar o model

python manage.py migrate 


projeto_belem/alunos/admin.py

from django.contrib import admin from .models import Aluno admin.site.register(Aluno)

Iniciar o servidor

python manage.py runserver

Visualizando no browser. Mostra alunos
http://127.0.0.1:8000/admin/


models.py

Adicionando toString na classe

from django.db import models class Aluno(models.Model): nome = models.CharField(max_length=200) curso = models.CharField(max_length=200) data_nasc = models.PositiveSmallIntegerField() matricula = models.BooleanField(default=True) def __str__ (self): return self.nome return self.curso return self.data_nasc return self.matricula

Confirmar alterações na classe

python manage.py makemigrations
python manage.py migrate
python manage.py runserver


projeto_belem/projeto_belem/urls.py

from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')) ]

projeto_belem/projeto_belem/settings.py

Adicionar ao final da classe

REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }


Criar o diretorio api e os arquivos:

  • serializers.py
  • views.py
  • urls.py
  • __init__.py

projeto_belem/alunos/api/serializers.py

from rest_framework import serializers from alunos.models import Aluno class AlunoSerlialiser(serializers.ModelSerializer): class Meta: model = Aluno fields = ('__all__')

projeto_belem/alunos/api/views.py

from rest_framework import viewsets from alunos.models import Aluno from alunos.api.serializers import AlunoSerlialiser class AlunoViewSet(viewsets.ModelViewSet): queryset = Aluno.objects.all().filter(matricula=True) serializer_class = AlunoSerlialiser

projeto_belem/alunos/api/urls.py

from django.urls import path, include from rest_framework import routers from .views import AlunoViewSet router = routers.DefaultRouter() router.register('alunos', AlunoViewSet) urlpatterns = [ path('', include((router.urls))) ]

projeto_belem/alunos/api/__init__.py

projeto_belem/projeto_belem/urls.py

"""projeto_belem URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.0/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('api-auth/', include('rest_framework.urls')), path('api/', include('alunos.api.urls')) ]

Projeto finalizado

http://127.0.0.1:8000/


http://127.0.0.1:8000/admin/


http://127.0.0.1:8000/api/


http://127.0.0.1:8000/api/alunos/

:fire: Criando projeto many to many

Criar um diretorio para armazenar os projetos

mkdir projetosMany

Criar a env e ativar

python3 -m venv proj_many_env
proj_many_env\Scripts\activate.bat

Fazer as instalações das bibliotecas:

pip install django pip install psycopg2 pip install django djangorestframework markdown django-filter pip install requests pip install django-cors-headers pip install httpie

.

pip install django

pip install psycopg2

pip install django djangorestframework markdown django-filter

pip install requests

pip install django-cors-headers

pip install httpie

Criar o projeto django chamado sistema

django-admin startproject sistema

Entrar no diretorio criado:

cd sistema 

Criar o app.

python manage.py startapp restEstoque

Projeto criado

Alterar models.py

from django.db import models class Peca(models.Model): idPeca = models.AutoField(primary_key= True,) valor = models.FloatField() descricao = models.CharField(max_length=255) def __str__(self): return '%d, %f, %s' % (self.idPeca, self.valor, self.descricao) def __repr__(self): return '%d, %f, %s' % (self.idPeca, self.valor, self.descricao) pass class Usuario(models.Model): idUsuario = models.AutoField(primary_key=True, ) nome = models.CharField(max_length= 100) def __repr__(self): return '%d, %s' % (self.idUsuario, self.nome) def __str__(self): return '%d, %s' % (self.idUsuario, self.nome) pass class Demanda(models.Model): idDemanda = models.AutoField(primary_key = True, ) rua = models.CharField(max_length=100) bairro = models.CharField(max_length=100) numero = models.CharField(max_length=100) cep = models.CharField(max_length=100) cidade = models.CharField(max_length=100) status = models.IntegerField() usuario = models.ForeignKey(Usuario, on_delete=models.CASCADE) pecas = models.ManyToManyField(Peca) def __str__(self): return '%d, %s, %s, %s, %s, %s, %s' % (self.idDemanda, self.rua, self.bairro, self.numero, self.cep, self.cidade, self.status) def __repr__(self): return '%d, %s, %s, %s, %s, %s, %s' % (self.idDemanda, self.rua, self.bairro, self.numero, self.cep, self.cidade, self.status) pass

Alterar settings.py, inserindo os apps e o banco de dados

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework.authtoken',
    'restEstoque'
]

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'aulateste',
        'USER': 'postgres',
        'HOST': 'localhost',
        'PASSWORD': 'coti',
        'PORT': '5432',
    }
}

Alterar Urls.py do projeto (sistema). Deixar comentado para rodar o makemigrations

from django.contrib import admin from django.urls import path, include from django.conf.urls import url from rest_framework.authtoken.views import obtain_auth_token # from restEstoque.urls import router urlpatterns = [ path('api/token/', obtain_auth_token, name='api-token'), # url(r'^api/', include(router.urls)) ]

Fazer a migration

python manage.py makemigrations restEstoque

python manage.py migrate

Classe gerada 0001_initial.py

# Generated by Django 3.0.5 on 2020-05-13 19:15 from django.db import migrations, models import django.db.models.deletion class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Peca', fields=[ ('idPeca', models.AutoField(primary_key=True, serialize=False)), ('valor', models.FloatField()), ('descricao', models.CharField(max_length=255)), ], ), migrations.CreateModel( name='Usuario', fields=[ ('idUsuario', models.AutoField(primary_key=True, serialize=False)), ('nome', models.CharField(max_length=100)), ], ), migrations.CreateModel( name='Demanda', fields=[ ('idDemanda', models.AutoField(primary_key=True, serialize=False)), ('rua', models.CharField(max_length=100)), ('bairro', models.CharField(max_length=100)), ('numero', models.CharField(max_length=100)), ('cep', models.CharField(max_length=100)), ('cidade', models.CharField(max_length=100)), ('status', models.IntegerField()), ('pecas', models.ManyToManyField(to='restEstoque.Peca')), ('usuario', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='restEstoque.Usuario')), ], ), ]

Criar o admin do projeto. Usuario: belem, senha: 123

python manage.py createsuperuser

Dentro de sistema criar o diretorio api


Dentro de restEstoque criar o arquivo serializers.py

from rest_framework import serializers from .models import * class PecaSerializer(serializers.ModelSerializer): class Meta: model = Peca fields = ('idPeca', 'valor', 'descricao') pass class UsuarioSerializer(serializers.ModelSerializer): class Meta: model = Usuario fields = ('idUsuario', 'nome') pass class DemandaSerializer(serializers.ModelSerializer): class Meta: model = Demanda fields = ('idDemanda', 'rua', 'bairro', 'numero', 'cidade', 'cep', 'status', 'usuario', 'pecas') pass

Alterar a views.py do rest_projeto

from django.shortcuts import render from .models import * from .serializers import * from rest_framework import viewsets, authentication, permissions, serializers,reverse class DemandaViewSet(viewsets.ModelViewSet): queryset = Demanda.objects.order_by('idDemanda') serializer_class = DemandaSerializer links = serializers.SerializerMethodField() # PUT, DELETE, POST, GET def get_links(self, obj): request = self.context['request'] return { 'self': reverse('demanda-detail', kwargs={'pk': obj.pk}, request=request) } pass pass class PecaViewSet(viewsets.ModelViewSet): queryset = Peca.objects.order_by('valor') serializer_class = PecaSerializer links = serializers.SerializerMethodField() # PUT, DELETE, POST, GET def get_links(self, obj): request = self.context['request'] return { 'self': reverse('peca-detail', kwargs={'pk': obj.pk}, request=request) } pass pass class UsuarioViewSet(viewsets.ModelViewSet): queryset = Usuario.objects.order_by('nome') serializer_class = UsuarioSerializer links = serializers.SerializerMethodField() # PUT, DELETE, POST, GET def get_links(self, obj): request = self.context['request'] return { 'self': reverse('usuario-detail', kwargs={'pk': obj.pk}, request=request) } pass pass class DefaultsMixin(object): authentication_classes = ( authentication.BasicAuthentication, authentication.TokenAuthentication ) permission_classes = ( permissions.IsAuthenticated, ) pass

Alterar urls.py dentro do restEstoque

from rest_framework.routers import SimpleRouter, DefaultRouter from .import views router = DefaultRouter() router.register(r'demandas', views.DemandaViewSet) router.register(r'pecas', views.PecaViewSet) router.register(r'usuarios', views.UsuarioViewSet)

Alterar urls.py de sistema. Descomentar

from django.contrib import admin from django.urls import path, include from django.conf.urls import url from rest_framework.authtoken.views import obtain_auth_token from restEstoque.urls import router urlpatterns = [ path('api/token/', obtain_auth_token, name='api-token'), url(r'^api/', include(router.urls)) ]

Para rodar:

python manage.py runserver

:eye: Visualizando no banco

tags: python apostila