{"version":1,"pages":[{"id":"i0GIKvRkBNixWpqINxN8","title":"Dica 1 - Django boilerplate e cookiecutter-django","pathname":"/","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"xd2OeNHL4prGGrNmKalf","title":"Dica 1.1 - Django boilerplate","pathname":"/001-django-boilerplate","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"uQitBi8ip3GxRu3taAT0","title":"Dica 2 - Django extensions","pathname":"/002-django-extensions","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"Gat9Odn1qQ21xOPb4Bza","title":"Dica 3 - Django bulk_create e django-autoslug","pathname":"/003-django-bulk_create-e-django-autoslug","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"kuxFwAEcGf06UiiTFLU1","title":"Dica 4 - Django Admin personalizado","pathname":"/004-django-admin-personalizado","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"RwDNGWGkeagNDmKEYJpd","title":"Dica 5 - Django Admin Date Range filter","pathname":"/005-django-admin-date-range-filter","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"3shqRlK2bQbF8FeZNPkH","title":"Dica 6 - Geradores de senhas randômicas - uuid, hashids, secrets","pathname":"/006-geradores-de-senhas-randomicas-uuid-hashids-secrets","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"rCpBeTYRC0ZDjC6aVPcl","title":"Dica 7 - Rodando o ORM do Django no Jupyter Notebook","pathname":"/007-rodando-o-orm-do-django-no-jupyter-notebook","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"3RfCPXDZ3MDxli819HUR","title":"Dica 8 - Conhecendo o Django Debug Toolbar","pathname":"/008-conhecendo-o-django-debug-toolbar","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"OyEXIhYfa2xdE9wJ47Gz","title":"Dica 9 - Escondendo suas senhas python-decouple","pathname":"/009-escondendo-suas-senhas-python-decouple","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"Pfzr3X1SIKHZEsDYPlxI","title":"Dica 10 - Prototipagem de web design (Mockup)","pathname":"/010-prototipagem-de-web-design-mockup","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"EBwG8sTfDDHGzUcSWqqV","title":"Dica 11 - Bootstrap e Bulma + Colorlib","pathname":"/011-bootstrap-e-bulma--colorlib","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"nuK9wkhBKiQvmc4uewZN","title":"Dica 12 - Imagens: pexels e unsplash","pathname":"/012-imagens-pexels-e-unsplash","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"LIhaPepVT8fhNaROZDMQ","title":"Dica 13 - Cores","pathname":"/013-cores","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"8PJXY3WsU5Y6Pz15qI5g","title":"Dica 14 - Herança de Templates e Arquivos estáticos","pathname":"/014-heranca-de-templates-e-arquivos-estaticos","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"SzB03CSmenysXVkftpTz","title":"Dica 15 - Busca por data no frontend","pathname":"/015-busca-por-data-no-frontend","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"LWNofO8czs49C0WD53l5","title":"Dica 16 - Filtros com django-filter","pathname":"/016-filtros-com-django-filter","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"xDNLrRyd7qdidFuKovI0","title":"Dica 17 - Criando comandos personalizados","pathname":"/017-criando-comandos-personalizados","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"JST2XLeiNwaMbrNdb70f","title":"Dica 18 - bulk_create e bulk_update","pathname":"/018-bulk_create-e-bulk_update","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"xfxRRIJmgxNRa4H6Sq5f","title":"Dica 19 - Criando Issues por linha de comando com a api do github","pathname":"/019-criando-issues-por-linha-de-comando-com-a-api-do-github","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"JTuqOOUdeo5944ouSZ8a","title":"Dica 20 - api github e click","pathname":"/020-api-github-e-click","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"0QpwyWuArXGNxG02dr49","title":"Dica 21 - Criando issues por linha de comando com gitlab cli","pathname":"/021-criando-issues-por-linha-de-comando-com-gitlab-cli","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"7zOfZub8Onfx5NpkP7rv","title":"022-criando-issues-por-linha-de-comando-com-bitbucket-cli","pathname":"/022-criando-issues-por-linha-de-comando-com-bitbucket-cli","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"QvvSfp0A94ySc4E4MIWN","title":"Dica 23 - Diferença entre JSON dump, dumps, load e loads","pathname":"/023-diferenca-entre-json-dump-dumps-load-e-loads","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"gwRAfGvjjuf4vvt7T1Z1","title":"Dica 24 - Barra de progresso","pathname":"/024-barra-de-progresso","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"xaTtQiq3MbYSVKXdqEyc","title":"Dica 25 - Rodando Shell script dentro do Python","pathname":"/025-rodando-shell-script-dentro-do-python","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"7Ke2HH651zk6PRz8q6OP","title":"Dica 26 - Rodando Python dentro do Shell script","pathname":"/026-rodando-python-dentro-do-shell-script","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"fhJqcNUw3fzVzYe9aUjU","title":"Dica 27 - Retornando os nomes dos campos do model","pathname":"/027-retornando-os-nomes-dos-campos-do-model","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"bAEknOAlammosXSyol9N","title":"Dica 28 - Admin: Usando short description","pathname":"/028-admin-usando-short-description","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"VZ7GwACtJn6dP4muvwze","title":"Dica 29 - Django Admin: Criando actions no Admin","pathname":"/029-django-admin-criando-actions-no-admin","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"PH322Yy2M5Esp0eqgAvL","title":"Dica 30 - Django Admin: Editando direto na listview do Admin","pathname":"/030-django-admin-editando-direto-na-listview-do-admin","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"YR3Waq9b3sa2rFtHCOJH","title":"Dica 31 - Django Admin: Pegando usuário logado no Admin","pathname":"/031-django-admin-pegando-usuario-logado-no-admin","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"jNFW383r5aSlGRiGJnWG","title":"Dica 32 - Django Admin: Sobreescrevendo os templates do Admin","pathname":"/032-django-admin-sobreescrevendo-os-templates-do-admin","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"VwCkkg9NtCwXqgPgFKNz","title":"Dica 33 - Github cli","pathname":"/033-github-cli","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"aW26h2Qih06e3nZXtgJ7","title":"Dica 34 - Django: custom template tags","pathname":"/034-django-custom-template-tags","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"0cdrQSXVdcYiPn0map29","title":"Dica 35 - Django: passando usuário logado no formulário","pathname":"/035-django-passando-usuario-logado-no-formulario","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"g2VGwRpBMSZVqVpZgbMd","title":"Dica 36 - Django: visualizando seus modelos com graph models","pathname":"/036-django-visualizando-seus-modelos-com-graph-models","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"fA7c644Ggz9r4P9hSywH","title":"Dica 37 - Faker","pathname":"/037-faker","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"0jocztyQ0Z8AYzy0myDr","title":"Dica 38 - Django: Paginação + Filtros","pathname":"/038-django-paginacao-filtros","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"xrfKhYFzek9Zuo2jTXrF","title":"Dica 39 - Django Admin: display decorator (Django 3.2+)","pathname":"/039-django-admin-display-decorator-django-32","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"j9kRHpnO3lNyliVBGuJu","title":"Dica 40 - Formulários: date, datetime, duration e templatetags de data","pathname":"/040-formularios-date-datetime-duration-e-templatetags-de-data","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"QSkgMQx6qu4xLltLnG10","title":"Dica 41 - django-seed","pathname":"/041-django-seed","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"ZGlN6kOWCfmTxtEO6sYm","title":"Dica 42 - Custom context processors","pathname":"/042-custom-context-processors","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"PQQ95h8wOiJKKhhJp3z0","title":"Dica 43 - django-admin-rangefilter","pathname":"/043-django-admin-rangefilter","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"1mueMpLRZq1Y9MhkBuAU","title":"Dica 44 - Django: F() expression","pathname":"/044-django-f-expression","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"iSlz9BOqKkFWgNzlFwiQ","title":"Dica 45 - DRF: Scaffold django apis - Django REST framework","pathname":"/045-drf-scaffold","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"WeRMBYJYMGZ8vZ3t8XBF","title":"Dica 46 - DRF: drf-yasg - Yet another Swagger generator","pathname":"/046-drf-yasg","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"zZpH5j97Ywa7uafa4YXb","title":"Dica 47 - DRF: djoser - Django REST framework","pathname":"/047-djoser","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"6Xy3aoOqiBBr78FYGEai","title":"Dica 48 - DRF: Reset de Senha com djoser - Django REST framework","pathname":"/048-reset-senha","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"8QWsyvTuC6Iq5lYyyH6V","title":"Dica 49 - DRF: Autenticação via JWT com djoser - Django REST framework","pathname":"/049-jwt","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"GXash6nl7cSPZt0TssBr","title":"Dica 50 - DRF: Django CORS headers","pathname":"/050-django-cors-headers","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"wmvjoi5LFLP8tCI7FVhD","title":"Dica 51 - DRF: paginação","pathname":"/051-drf-paginacao","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"ZvvAqqa3uhxJt2aBuaxk","title":"Dica 52 - DRF: django-filter","pathname":"/052-drf-django-filter","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"C8wJeGXCTJlFubQbgzAG","title":"Dica 53 - DRF: Criando subrota com action","pathname":"/053-drf-routing-for-extra-actions","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"Zveyzk5m6GMs1HZYIPo0","title":"54-django-extensions-mais-comandos","pathname":"/054-django-extensions-mais-comandos","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"fpiI77sUhCdYEKEhsF79","title":"Dica 55 - Rodando Django em https localmente com runserver_plus","pathname":"/055-runserver_plus","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"YleNMUUi8ps1ztxRSSQV","title":"Dica 56 - Django inlineformset_factory + HTMX","pathname":"/056-inlineformset_factory","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"E3bIHAUbS49bYbFFH1I6","title":"Dica 57 - Criando API com Django SEM DRF","pathname":"/057-criando-api-com-django-sem-drf","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"cV7AYwPtBXwF80L6s7ij","title":"Dica 58 - Rodando PostgreSQL com Docker + Portainer + pgAdmin + Django local para desenvolvimento","pathname":"/058-rodando-postgresql-com-docker","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"69xHtfk1g6BgeGi0KO9h","title":"Dica 59 - Django: Busca por palavras acentuadas ou sem acento","pathname":"/059-django-busca-por-palavras-acentuadas-ou-sem-acento","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"yCcwwE6lwKK4Te77BhZs","title":"Dica 60 - Django: Adicionando atributos extras no formulário","pathname":"/060-atributos-extra-no-formulario","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"8IqxpfnvMiVVVUZh45Oq","title":"Dica 01 - Criando Issues com API do Github (Linux)","pathname":"/061-01-criando-issues-com-api-github","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"NIjUhnK9iXckwUng4EKM","title":"Dica 02 - Usando http.server","pathname":"/062-02-usando-http-server","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"61uEknlsTPAlcLf2MBZW","title":"Dica 03 - Criando um template com Bulma CSS","pathname":"/063-03-template-bulma-css","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"trpgxxG3oXw1MgdVaSeB","title":"Dica 04 - Criando um template com Tailwind CSS","pathname":"/064-04-template-tailwindcss","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"ATyOB5Ev0y2l8n1qYrRz","title":"Dica 05 - htmx simples","pathname":"/065-05-template-htmx","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"un8tG5ErC6dRz1G7pyX1","title":"Dica 06 - Criando o projeto Django","pathname":"/066-06-projeto-django","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"fflX5g0KeMmlGrq7AgOU","title":"Dica 07 - PostgreSQL, pgAdmin e MailHog com docker-compose","pathname":"/067-07-docker-compose","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"LTOYJorrr6QFuFGiOUyS","title":"Dica 08 - Aplicando isort e autopep8","pathname":"/068-08-isort-autopep8","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"K54qupOdeNbcy2VeqaT7","title":"Dica 09 - Aplicando djhtml","pathname":"/069-09-djhtml","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"adhQGyXTw6wKWn6nhT0w","title":"Dica 10 - Criando Makefile","pathname":"/070-10-makefile","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"Cs6amsutr08gvcCDvA8P","title":"Dica 11 - Criando Landpage de produtos","pathname":"/071-11-landpage","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"2Jk8wdOWttZAX3miaTmy","title":"072-012-fale-co-nosco-form-email","pathname":"/072-012-fale-co-nosco-form-email","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"D0z5QSvwFlfZ13qQ5Bs3","title":"Dica 13 - Dashboard com Django e Tailwind CSS","pathname":"/073-13-dashboard","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"H6wDzJeQ13mikEfqtufL","title":"Dica 14 - Django Custom User com e-mail","pathname":"/074-14-django-custom-user-email","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"LmPm8Y0S0AuV6MOyENXB","title":"Dica 15 - Login com e-mail no Django","pathname":"/075-15-login-com-email","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"lPgo4mY9eXsyjyVqkDWn","title":"Dica 16 - Logout","pathname":"/076-16-logout","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"IQUvYDE9AkxOzC50gJyf","title":"Dica 17 - Cadastro de Usuários no Django","pathname":"/077-17-cadastro","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"rO9OMqJrZDOOQ6fPOsYY","title":"Dica 18 - Esqueci a senha","pathname":"/078-18-esqueci-senha","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"PzKWfAosMyldQZTuBGGO","title":"Dica 19.1 - Modelagem - OneToMany - Um pra Muitos - ForeignKey - Chave Estrangeira","pathname":"/079-19-1-modelagem-onetomany","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"zSPWNozv7lbD0WeohZZO","title":"Dica 19.2 - Modelagem - OneToOne - Um pra Um","pathname":"/080-19-2-modelagem-onetoone","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"yy3J3c77g5uaLD89rek5","title":"Dica 19.3 - Modelagem - ManyToMany - Muitos pra Muitos","pathname":"/081-19-3-modelagem-manytomany","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"BHg0E2w5peBARUGvuSap","title":"Dica 19.4 - Modelagem - Abstract Inheritance - Herança Abstrata","pathname":"/082-19-4-modelagem-abstract-inheritance","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"sD6tSozTLn75QF2bkv1f","title":"Dica 19.5 - Modelagem - Multi-table Inheritance - Herança Multi-tabela","pathname":"/083-19-5-modelagem-multi-table-inheritance","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"JAUYsQnuHDGi7Qpl19wP","title":"Dica 19.6 - Modelagem - Proxy Model","pathname":"/084-19-6-modelagem-proxy-model","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"eZVWtn3o6aU7USeOZgXP","title":"Dica 19.7 - Modelagem - Resumo","pathname":"/085-19-7-modelagem-resumo","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"cetxXqXb2twy2AwTTdW5","title":"Dica 20 - Templates","pathname":"/086-20-templates","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"X2UDasqKSrl2Gv95E98K","title":"Dica 21 - Tentativas de Login","pathname":"/087-21-tentativas-de-login","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"fLC6MNJz00Nl2brfveAQ","title":"Dica 22 - Validação","pathname":"/088-22-validacao","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"Zo6lnQ8u8F9mbms4RtKi","title":"Dica 23 - CRUD de produtos","pathname":"/089-23-crud-produtos","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"DqQhIO9V8Wzgm5pQRJqS","title":"Dica 24 - Alpine.js e Django","pathname":"/090-24-alpinejs-django","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"0Ay6OtcOgpYiqOKOQq9J","title":"091-25-dica-queryset","pathname":"/091-25-dica-queryset","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"HQhh2clvmbb4YCkRMFzu","title":"Dica 26 - Paginação e Breadcrumb","pathname":"/092-26-paginacao-breadcrumb","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"AKxAatMIefe86kTLSQo2","title":"Dica 27 - Signals","pathname":"/093-27-signals","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"uIMEG68wZTE1b5bhax2B","title":"Dica 28 - Gerando dados aleatórios com Faker - faker-commerce","pathname":"/094-28-faker-commerce","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"cJxIi2gj0LkZ4mfS1Alt","title":"Dica 29 - Importando CSV","pathname":"/095-29-import-csv","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"yPLtn2rOI5FsTIPs667u","title":"096-30-import-csv-inmemoryuploadedfile","pathname":"/096-30-import-csv-inmemoryuploadedfile","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"jF5LIuA53k4ggGE7q4V8","title":"Dica 31 - Importando CSV com Pandas","pathname":"/097-31-import-csv-pandas","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"h5v0GenSj92NmB7qs1rY","title":"Dica 32 - Importando CSV com Dask","pathname":"/098-32-import-csv-dask","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"Xh5Wb8to4jBGOV2Cek6k","title":"Dica 33 - Importando XLSX com OpenPyXL","pathname":"/099-33-import-xlsx","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"0cO7XlV7cpXjqkAKdSus","title":"100-34-export-csv","pathname":"/100-34-export-csv","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"8AdnMyPbVmcrpTxjuMTo","title":"Dica 35 - Exportando XLSX mais rápido com pyexcelerate","pathname":"/101-35-export-xlsx","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"YIx26qJ2k7hjG1Ufio12","title":"Dica 36 - Exportando CSV e XLSX pelo front no projeto","pathname":"/102-36-export-csv-xlsx-front","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"3W1sRzZDjqGPrVllmB6K","title":"Novidades do Django 5.1","pathname":"/103-django-51","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"VPgClV6ex2HjSTVP1BCi","title":"Django Router","pathname":"/104-django-router","siteSpaceId":"sitesp_8vpqv","description":""},{"id":"kD9T5t9hw4bK97FqxrTO","title":"105-django-52","pathname":"/105-django-52","siteSpaceId":"sitesp_8vpqv","description":""}]}