├── .gitignore ├── README.rst ├── ajuda └── python-anywhere.md ├── antigo ├── djangogirls │ ├── .cache │ │ └── v │ │ │ └── cache │ │ │ └── lastfailed │ └── mysite │ │ ├── .cache │ │ └── v │ │ │ └── cache │ │ │ └── lastfailed │ │ ├── blog │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-36.pyc │ │ │ ├── admin.cpython-36.pyc │ │ │ ├── models.cpython-36.pyc │ │ │ ├── urls.cpython-36.pyc │ │ │ └── views.cpython-36.pyc │ │ ├── admin.py │ │ ├── apps.py │ │ ├── jinja2 │ │ │ ├── base.html │ │ │ ├── post_detail.html │ │ │ └── post_list.html │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── __init__.py │ │ │ └── __pycache__ │ │ │ │ ├── 0001_initial.cpython-36.pyc │ │ │ │ └── __init__.cpython-36.pyc │ │ ├── models.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ │ ├── db.sqlite3 │ │ ├── manage.py │ │ ├── mysite │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── __init__.cpython-36.pyc │ │ │ ├── jinja2.cpython-36.pyc │ │ │ ├── settings.cpython-36.pyc │ │ │ ├── urls.cpython-36.pyc │ │ │ └── wsgi.cpython-36.pyc │ │ ├── jinja2.py │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ │ └── tests │ │ ├── __pycache__ │ │ └── test_post.cpython-36-PYTEST.pyc │ │ └── test_post.py └── trabalhos │ ├── EP1.rst │ ├── EP2.rst │ ├── EP3.rst │ ├── EP4.rst │ └── issues-summaeh.rst ├── aulas └── html.md ├── bak └── djangogirls │ ├── __pycache__ │ └── blog.cpython-36.pyc │ ├── db.sqlite3 │ ├── djangogirls │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── settings.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── wsgi.cpython-36.pyc │ ├── settings.py │ └── urls.py │ ├── manage.py │ ├── micro │ ├── __init__.py │ ├── __main__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── __main__.cpython-36.pyc │ │ ├── app.cpython-36.pyc │ │ ├── settings.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── wsgi.cpython-36.pyc │ ├── app.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ └── old_blog │ ├── __init__.py │ ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── admin.cpython-36.pyc │ ├── forms.cpython-36.pyc │ ├── models.cpython-36.pyc │ ├── urls.cpython-36.pyc │ └── views.cpython-36.pyc │ ├── admin.py │ ├── apps.py │ ├── forms.py │ ├── migrations │ ├── 0001_initial.py │ ├── 0002_blogpost_date.py │ ├── 0003_auto_20180410_1333.py │ ├── __init__.py │ └── __pycache__ │ │ ├── 0001_initial.cpython-36.pyc │ │ ├── 0002_blogpost_date.cpython-36.pyc │ │ ├── 0003_auto_20180410_1333.cpython-36.pyc │ │ └── __init__.cpython-36.pyc │ ├── models.py │ ├── static │ └── css │ │ └── blog.css │ ├── templates │ └── blog │ │ ├── base.html │ │ ├── post_detail.html │ │ ├── post_edit.html │ │ └── post_list.html │ └── tests.py ├── djangogirls-micro ├── blog │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── admin.cpython-36.pyc │ │ ├── forms.cpython-36.pyc │ │ ├── models.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── views.cpython-36.pyc │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_blogpost_date.py │ │ ├── 0003_auto_20180410_1333.py │ │ ├── __init__.py │ │ └── __pycache__ │ │ │ ├── 0001_initial.cpython-36.pyc │ │ │ ├── 0002_blogpost_date.cpython-36.pyc │ │ │ ├── 0003_auto_20180410_1333.cpython-36.pyc │ │ │ └── __init__.cpython-36.pyc │ ├── static │ │ └── css │ │ │ └── blog.css │ └── templates │ │ └── blog │ │ ├── base.html │ │ ├── post_detail.html │ │ ├── post_edit.html │ │ └── post_list.html ├── db.sqlite3 ├── djangogirls │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── settings.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── wsgi.cpython-36.pyc │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py ├── djangogirls └── djangogirls │ ├── blog │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── admin.cpython-36.pyc │ │ ├── forms.cpython-36.pyc │ │ ├── models.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── views.cpython-36.pyc │ ├── admin.py │ ├── apps.py │ ├── forms.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_blogpost_date.py │ │ ├── 0003_auto_20180410_1333.py │ │ ├── __init__.py │ │ └── __pycache__ │ │ │ ├── 0001_initial.cpython-36.pyc │ │ │ ├── 0002_blogpost_date.cpython-36.pyc │ │ │ ├── 0003_auto_20180410_1333.cpython-36.pyc │ │ │ └── __init__.cpython-36.pyc │ ├── models.py │ ├── static │ │ └── css │ │ │ └── blog.css │ ├── templates │ │ └── blog │ │ │ ├── base.html │ │ │ ├── post_detail.html │ │ │ ├── post_edit.html │ │ │ └── post_list.html │ ├── tests.py │ ├── urls.py │ └── views.py │ ├── db.sqlite3 │ ├── djangogirls │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── settings.cpython-36.pyc │ │ ├── urls.cpython-36.pyc │ │ └── wsgi.cpython-36.pyc │ ├── settings.py │ ├── urls.py │ └── wsgi.py │ └── manage.py ├── exemplos └── css │ ├── flex.css │ ├── flex.html │ ├── page.html │ ├── style.css │ ├── style.css.map │ └── style.scss ├── private ├── prova1.html ├── prova1.md └── prova1.pdf └── provas └── prova1 └── pastebin ├── db.sqlite3 ├── manage.py ├── pastebin ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── admin.cpython-36.pyc │ ├── models.cpython-36.pyc │ ├── urls.cpython-36.pyc │ └── views.cpython-36.pyc ├── admin.py ├── apps.py ├── jinja2 │ └── pastebin │ │ ├── index.jinja2 │ │ ├── paste-detail.jinja2 │ │ └── paste-language.jinja2 ├── migrations │ ├── __init__.py │ └── __pycache__ │ │ └── __init__.cpython-36.pyc ├── models.py ├── tests.py ├── urls.py └── views.py └── pastebin_project ├── __init__.py ├── __pycache__ ├── __init__.cpython-36.pyc ├── jinja2.cpython-36.pyc ├── settings.cpython-36.pyc ├── urls.cpython-36.pyc ├── views.cpython-36.pyc └── wsgi.cpython-36.pyc ├── jinja2.py ├── jinja2 ├── base.jinja2 └── static.jinja2 ├── settings.py ├── static ├── css │ └── main.css └── js │ └── main.js ├── urls.py ├── views.py └── wsgi.py /.gitignore: -------------------------------------------------------------------------------- 1 | .sass-cache 2 | djangogirls/myenv/ 3 | exemplos/wagtail/env/ 4 | private/ -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | =============== 2 | Programação Web 3 | =============== 4 | 5 | Este é o repositório da disciplina de Programação Web para o semestre 1/2018 na Faculdade do Gama/UnB. Este arquivo contêm informações básicas sobre a disciplina e o plano de ensino do semestre. 6 | 7 | 8 | Informações básicas 9 | =================== 10 | 11 | Curso: 12 | Engenharia de Software 13 | Professor: 14 | Fábio Macêdo Mendes 15 | Disciplina: 16 | Programação Web 17 | Semestre/ano: 18 | 01/2018 19 | Carga horária: 20 | 60 h 21 | Créditos: 22 | 04 23 | 24 | 25 | Ementa 26 | ====== 27 | 28 | * Conceitos básicos de tecnologia Web 29 | * HTML5, Javascript e CSS 30 | * Frameworks para desenvolvimento e MVC 31 | * Servidores de aplicação 32 | * APIs e interoperabilidade 33 | * Testes em aplicações Web 34 | 35 | 36 | Horário das aulas e atendimento 37 | =============================== 38 | 39 | Aulas teóricas e de exercícios: terças e quintas-feiras às 16h 40 | Atendimento e monitoria: a definir 41 | 42 | 43 | Metodologia 44 | =========== 45 | 46 | O método básico aplicado é o de aulas práticas em laboratório de computação voltadas à implementação de funcionalidades dentro de um projeto compartilhado port toda a turma. As aulas podem conter partes expositivas orientadas à discussão da teoria e ferramentas utilizadas. As aulas também serão complementadas com atividades de exercícios e demandas extra-classe. Os alunos devem se cadastrar no Github e acompanhar o repositório da turma (https://github.com/fabiommendes/progweb). 47 | 48 | Este semestre (1/2018) será dedicado a implementar um microframework baseado em Django. 49 | 50 | 51 | Critérios de avaliação 52 | ====================== 53 | 54 | Cada aluno será avaliado com uma nota numérica onde a conversão entre a pontuação e a menção final é feita da forma usual: 9,0pts+: SS, 7,0pts+: MS, 5,0pts+: MM, 3,0pts+: MI e < 3,0 pts II. A distribuição de pontos ao longo do curso segue a fórmula:: 55 | 56 | NotaFinal = 0.15 * P1 + 0.30 * P2 + 0.15 * ME + 0.40 * MT 57 | 58 | onde P1 e P2 consistem na nota das provas 1 e 2; ME representa a média dos exercícios individuais (feitos em casa); MT representa a média dos testes realizados em sala de aula. Os testes serão resolvidos em grupos de tamanho e composição variávies e consistem em tarefas esporádicas realizadas durante a aula e na nota da "Hackaton" de Programação Web, que será executada em duas edições. 59 | 60 | Gamificação 61 | ----------- 62 | 63 | O aluno poderá fazer algumas tarefas opcionais que dão direito a "poderes especiais" e outras vantagens ao longo do curso. Estes "poderes" podem modificar a nota final, abonar faltas, entre outros. Esta seção lista as tarefas disponíveis e os poderes associados. 64 | 65 | Django girls 66 | ~~~~~~~~~~~~ 67 | 68 | O aluno que participar como *coach* do Django-Girls ganha o direito de converter a menor nota de teste em 10. Não pode ser aplicado na nota da Hackaton. 69 | 70 | 71 | Prova substitutiva e faltas 72 | --------------------------- 73 | 74 | O curso não inclui prova substitutiva. Caso o aluno possua uma falta justificada no dia da primeira prova, deverá apresentar um comprovante na aula seguinte à prova ou quando terminar a licença médica. Esta justificativa não abona falta, mas dá direito ao aluno utilizar a segunda prova como prova substitutiva. 75 | 76 | O aluno pode faltar até 7 vezes em um semestre. Faltas com justificativa médica não serão abonadas, exceto em casos excepcionais. Os alunos reprovados por falta ficarão com uma menção igual a SR. 77 | 78 | 79 | Código de ética e conduta 80 | ------------------------- 81 | 82 | Algumas avaliações serão realizadas com auxílio do computador no laboratório de informática. Todas as submissões serão processadas por um programa de detecção de plágio. Qualquer atividade onde for detectada a presença de plágio será anulada sem a possibilidade de substituição. Não será feita qualquer distinção entre o aluno que forneceu a resposta para cópia e o aluno que obteve a mesma. 83 | 84 | As mesmas considerações também se aplicam às provas teóricas que serão respondidas à mão. 85 | 86 | 87 | Informações importantes 88 | ======================== 89 | 90 | Este curso utiliza GitHub + Github Classroom e o Google classroom para gerenciar o curso. A comunicação com a turma é feita através do Google Classroom ou por issues no repositório do Github. Habilite a funcionalidade "Watch" no repositório para receber notificações sobre atualizações. 91 | 92 | Google Classroom: 93 | http://classroom.google.com/ - Código de inscrição: nllue7 94 | Github: 95 | http://github.com/fabiommendes/progweb/ 96 | Github Classroom: 97 | http://github.com/programacao-web/ 98 | 99 | 100 | Prepare-se 101 | ========== 102 | 103 | Ao longo do curso abordaremos uma série de tecnologias em diferentes níveis de profundidade. Recomenda-se que cada aluno providencie a instalação de todos os pacotes o mais rapidamente o possível. O curso subentende um ambiente de desenvolvimento Linux funcional para realizar as atividades propostas no curso. É possível desenvolver em outras plataformas (ex. Windows e Mac), mas o curso assume que as entregas utilizem algum container Docker especificado pelo professor. Isto, naturalmente, exige ao menos algum nível de emulação do Linux utilizando o Docker machine, Vagrant ou similar. 104 | 105 | Docker + docker-compose: 106 | O curso disponibilizará algumas imagens Docker configuradas com as ferramentas essenciais utilizadas no curso (o link segue em breve). Todos os trabalhos serão testados em containers baseados nestas imagens. Ainda que o Docker contenha as ferramentas de desenvolvimento essenciais, recomenda-se a instalação local dos pacotes abaixo. 107 | Python 3.6+: 108 | É necessário um ambiente Python 3.6 ou superior com todos os pacotes de desenvolvimento instalados. No Ubuntu/Debian precisamos do python3-dev, python3-pip, python3-virtualenv 109 | Node.js e npm (ou Yarn): 110 | Certifique-se que é possível baixar pacotes do Node.js para o frontend. Vários desenvolvedores preferem o Yarn como alternativa ao NPM. 111 | Sass (ou Ruby): 112 | Se a distribuição não possui o pacote do Sass, instale o Ruby e digite ``sudo gem install sass``. 113 | Nginx, Postgres: 114 | Servidor de arquivos e banco. Não é necessário/recomendável fazer a instalação local, mas já se adiante e para baixar a imagem do docker hub: ``sudo docker pull nginx`` e ``sudo docker pull postgres`` 115 | Git, editor de código, conta no github: 116 | Kit básico ;) 117 | Versão atualizada do Chrome: 118 | Algumas partes do curso poderão utilizar funcionalidades que (atualmente) estão implementadas somente no Google Chrome. Certifique que seu computador possui uma versão atualizada deste navegador. 119 | Outros: 120 | Virtualenvwrapper (``sudo apt-get install virtualenvwrapper``), Pytest (``pip3 install pytest --user``), Invoke (``pip3 install invoke --user``), Webpack (``sudo npm install -g webpack``) 121 | Sugestões de editor de código: 122 | Utilize o seu favorito. Caso precise de uma recomendação, seguem algumas: 123 | 124 | * PyCharm Educacional - IDE com ótimos recursos de introspecção e refatoração que adora memória RAM. Possui versão livre e versão profissional gratuita para estudantes. 125 | * VSCode - um bom meio termo entre uma IDE e um editor de código leve. Criado para Javascript, mas possui plugins para Python e várias outras linguagens. 126 | * Vi/Vim - herança dos anos 70 que nunca morre. Instale os plugins para Python e Javascript. 127 | 128 | 129 | Cronograma de atividades 130 | ======================== 131 | 132 | +--------+-------+------------------------------------------------------------+ 133 | | Semana | Data | Aula | 134 | +========+=======+============================================================+ 135 | | 1 | 06/03 | Início das aulas – Apresentação do curso e tecnologias Web | 136 | | | | | 137 | | | | * HTML5 e XML | 138 | | | | * Marcação de text e hipertexto | 139 | | | | * CSS | 140 | | | | * Javascript | 141 | +--------+-------+------------------------------------------------------------+ 142 | | | 08/03 | HTML | 143 | | | | | 144 | | | | * Histórico: SGML, HTML, XML, XHTML, HTML5, etc | 145 | | | | * HTML semântico | 146 | | | | * Estruturando um hipertexto | 147 | | | | * Design progressivo | 148 | | | | * Tags personalizadas, divs e spans | 149 | | | | * Formatos XML embutidos (SVG, MathML) | 150 | +--------+-------+------------------------------------------------------------+ 151 | | 2 | 13/03 | CSS | 152 | | | | | 153 | | | | * Propriedades básicas | 154 | | | | * Seletores | 155 | | | | * Cascata e prioridades de seletores | 156 | | | | * Sass e pré-compiladores CSS | 157 | +--------+-------+------------------------------------------------------------+ 158 | | | 15/03 | Design responsivo | 159 | | | | | 160 | | | | * Media queries | 161 | | | | * Flex boxes | 162 | | | | * “Mobile first/responsive design” | 163 | | | | * Frameworks (e.g.: Twitter Bootstrap) | 164 | +--------+-------+------------------------------------------------------------+ 165 | | 3 | 20/03 | JavaScript | 166 | | | | | 167 | | | | * História | 168 | | | | * Sintaxe | 169 | | | | * Tipos básicos e estruturas de dados | 170 | | | | * Herança de protótipo | 171 | | | | * "The good parts" | 172 | +--------+-------+------------------------------------------------------------+ 173 | | | 22/03 | Javascript no navegador | 174 | | | | | 175 | | | | * Ferramentas de depuração e inspeção | 176 | | | | * DOM e modelo de dados | 177 | | | | * APIs básicas Manipulação da DOM | 178 | | | | * jQuery vs nativo | 179 | +--------+-------+------------------------------------------------------------+ 180 | | 4 | 27/03 | Web components | 181 | | | | | 182 | | | | * Templates | 183 | | | | * Custom elements | 184 | | | | * Shadow DOM | 185 | | | | * HTML Imports | 186 | | | | * Bibliotecas e interpretações | 187 | +--------+-------+------------------------------------------------------------+ 188 | | | 29/03 | Stencil.js (ou outra biblioteca de Web Components) | 189 | | | | | 190 | | | | * Criação de componentes e decoradores | 191 | | | | * Typescript | 192 | | | | * JSX | 193 | | | | * Compilação e distribuição | 194 | +--------+-------+------------------------------------------------------------+ 195 | | 5 | 03/04 | Arquitetura e ferramentas Django | 196 | | | | | 197 | | | | * Preparação de ambiente | 198 | | | | * Ferramentas | 199 | | | | * Apps/Projetos (https://djangopackages.org/) | 200 | | | | * Arquitetura MVC (ou MTV) | 201 | | | | * Views, requests, responses e middlewares | 202 | +--------+-------+------------------------------------------------------------+ 203 | | | 05/04 | Templates vs pseudo-DOM | 204 | | | | | 205 | | | | * Linguagens de template e views | 206 | | | | * Jinja2 + Django | 207 | | | | * ELM, Hyperapp, JSX, Python bricks | 208 | +--------+-------+------------------------------------------------------------+ 209 | | 6 | 10/04 | ORM do Django | 210 | | | | | 211 | | | | * Relação com o banco de dados | 212 | | | | * Criação/remoção de objetos | 213 | | | | * Validação | 214 | | | | * Busca de elementos | 215 | +--------+-------+------------------------------------------------------------+ 216 | | | 12/04 | Managers e QuerySets | 217 | | | | | 218 | | | | * Querysets e SQL | 219 | | | | * Problema N + 1 e eficiência do ORM | 220 | | | | * Personalizando QuerySets para um modelo | 221 | +--------+-------+------------------------------------------------------------+ 222 | | 7 | 17/04 | AJAX | 223 | | | | | 224 | | | | * JSON | 225 | | | | * Gerando JSON em Python e Javascript | 226 | | | | * Método Fetch | 227 | | | | * Servindo JSON | 228 | | | | * Django REST Framework | 229 | +--------+-------+------------------------------------------------------------+ 230 | | | 19/04 | Arquitetura REST | 231 | | | | | 232 | | | | * API | 233 | | | | * Verbos HTTP | 234 | | | | * Interface REST | 235 | | | | * Alternativas ao REST | 236 | +--------+-------+------------------------------------------------------------+ 237 | | 8 | 24/04 | Arquitetura microframework | 238 | | | | | 239 | | | | * Flask | 240 | | | | * Blog em Flask | 241 | +--------+-------+------------------------------------------------------------+ 242 | | | 26/04 | Dojo - Micro Django | 243 | | | | | 244 | +--------+-------+------------------------------------------------------------+ 245 | | 9 | 01/05 | *Feriado - Dia do Trabalho* | 246 | | | | | 247 | +--------+-------+------------------------------------------------------------+ 248 | | | 03/05 | **Prova I** | 249 | | | | | 250 | +--------+-------+------------------------------------------------------------+ 251 | | 10 | 08/05 | Testes unitários | 252 | | | | | 253 | | | | * Biblioteca “pytest” | 254 | | | | * Casos de teste e classes de teste | 255 | | | | * Fixtures e conftest.py | 256 | | | | * Especificidades de testes em ambiente Django/web | 257 | | | | * Utilizando dados falsos | 258 | +--------+-------+------------------------------------------------------------+ 259 | | | 10/05 | Testes funcionais | 260 | | | | | 261 | | | | * Selenium | 262 | | | | * Controlando o navegador | 263 | | | | * Testes em JavaScript | 264 | +--------+-------+------------------------------------------------------------+ 265 | | 11 | 17/05 | Micro Django - views | 266 | | | | | 267 | | | | * Tipos de rotas | 268 | | | | * Verbos HTTP | 269 | | | | * Decoradores | 270 | | | | * Type hints e introspecção de assinatura | 271 | +--------+-------+------------------------------------------------------------+ 272 | | | 19/05 | Micro Django - Dojo | 273 | | | | | 274 | +--------+-------+------------------------------------------------------------+ 275 | | 12 | 22/05 | Docker | 276 | | | | | 277 | | | | * Isolamento de ambiente: containers e imagens | 278 | | | | * Sistema de arquivos | 279 | | | | * Dockerfile | 280 | | | | * Docker compose | 281 | +--------+-------+------------------------------------------------------------+ 282 | | | 24/05 | Empacotamento e gerência de configuração | 283 | | | | | 284 | | | | * Setuptools e PIP | 285 | | | | * Invoke | 286 | | | | * Tox e integração contínua | 287 | +--------+-------+------------------------------------------------------------+ 288 | | 13 | 29/05 | Micro Django - API | 289 | | | | | 290 | | | | * Roteadores e end-points | 291 | | | | * Construção automática de end-points | 292 | +--------+-------+------------------------------------------------------------+ 293 | | | 31/05 | *Feriado - Corpus Christi* | 294 | | | | | 295 | +--------+-------+------------------------------------------------------------+ 296 | | 14 | 05/06 | Micro Django - ORM | 297 | | | | | 298 | | | | * Revisitando declarações | 299 | | | | * Type hints | 300 | | | | * Metaclasses | 301 | +--------+-------+------------------------------------------------------------+ 302 | | | 07/06 | Micro Django - Dojo | 303 | | | | | 304 | +--------+-------+------------------------------------------------------------+ 305 | | 15 | 12/06 | Micro Django - QuerySet | 306 | | | | | 307 | | | | * Revisitando a sintaxe de filtros | 308 | | | | * API Pydata | 309 | | | | * Active Record: pattens e anti-patterns | 310 | +--------+-------+------------------------------------------------------------+ 311 | | | 14/06 | Micro Django - Dojo | 312 | | | | | 313 | +--------+-------+------------------------------------------------------------+ 314 | | 16 | 19/06 | Permissões e autorização | 315 | | | | | 316 | | | | * Permissões | 317 | | | | * Autenticação e autorização | 318 | | | | * Django-rules | 319 | +--------+-------+------------------------------------------------------------+ 320 | | | 21/06 | Segurança na rede | 321 | | | | | 322 | | | | * Injeção de SQL | 323 | | | | * CSRF | 324 | | | | * XSS | 325 | | | | * DoS | 326 | +--------+-------+------------------------------------------------------------+ 327 | | 17 | 26/06 | Formulários | 328 | | | | | 329 | | | | * Inputs em HTML | 330 | | | | * GET e POST | 331 | | | | * Classes do tipo “Form” | 332 | | | | * Formulários baseados em modelos | 333 | | | | * Apresentando um formulário | 334 | +--------+-------+------------------------------------------------------------+ 335 | | | 28/06 | **Prova II** | 336 | | | | | 337 | +--------+-------+------------------------------------------------------------+ 338 | | 18 | 03/07 | Livre | 339 | | | | | 340 | +--------+-------+------------------------------------------------------------+ 341 | | | 05/07 | Revisão de nota | 342 | | | | | 343 | +--------+-------+------------------------------------------------------------+ 344 | 345 | Obs.: O cronograma está sujeito a alterações. 346 | -------------------------------------------------------------------------------- /ajuda/python-anywhere.md: -------------------------------------------------------------------------------- 1 | PythonAnywhere 2 | ============== 3 | 4 | PythonAnywhere é um serviço de hospedagem de applicações Python gratuito com 5 | opções pagas de upgrade. Ele possui opções de hospedagem de applicações Django, 6 | Flask, entre outros. 7 | 8 | Instruções para instalar seu app Django 9 | --------------------------------------- 10 | 11 | Crie uma conta em https://www.pythonanywhere.com. O serviço disponibiliza uma 12 | máquina com Linux e um ambiente Python pré-configurado. 13 | -------------------------------------------------------------------------------- /antigo/djangogirls/.cache/v/cache/lastfailed: -------------------------------------------------------------------------------- 1 | { 2 | "myenv/lib/python3.6/site-packages/django/contrib/admindocs/tests/test_fields.py": true, 3 | "myenv/lib64/python3.6/site-packages/django/contrib/admindocs/tests/test_fields.py": true 4 | } -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/.cache/v/cache/lastfailed: -------------------------------------------------------------------------------- 1 | { 2 | "tests/test_post.py": true 3 | } -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiommendes/progweb/2fbca21fbe361ef4a0e1d63999d56fe21475e79a/antigo/djangogirls/mysite/blog/__init__.py -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiommendes/progweb/2fbca21fbe361ef4a0e1d63999d56fe21475e79a/antigo/djangogirls/mysite/blog/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/__pycache__/admin.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiommendes/progweb/2fbca21fbe361ef4a0e1d63999d56fe21475e79a/antigo/djangogirls/mysite/blog/__pycache__/admin.cpython-36.pyc -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/__pycache__/models.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiommendes/progweb/2fbca21fbe361ef4a0e1d63999d56fe21475e79a/antigo/djangogirls/mysite/blog/__pycache__/models.cpython-36.pyc -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/__pycache__/urls.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiommendes/progweb/2fbca21fbe361ef4a0e1d63999d56fe21475e79a/antigo/djangogirls/mysite/blog/__pycache__/urls.cpython-36.pyc -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/__pycache__/views.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fabiommendes/progweb/2fbca21fbe361ef4a0e1d63999d56fe21475e79a/antigo/djangogirls/mysite/blog/__pycache__/views.cpython-36.pyc -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Post 4 | 5 | admin.site.register(Post) 6 | -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BlogConfig(AppConfig): 5 | name = 'blog' 6 | -------------------------------------------------------------------------------- /antigo/djangogirls/mysite/blog/jinja2/base.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | {% block styles %} 4 | 11 | {% endblock %} 12 | 13 | {% block scripts %} 14 | {% endblock %} 15 | 16 |