Skip to content

Commit 94bd501

Browse files
committed
finalizando as alterações
1 parent 8637450 commit 94bd501

18 files changed

+41
-45
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AfroPython Tutorial
22

33
Esse tutorial é uma modificação do [tutorial original](https://tutorial.djangogirls.org/pt/) disponível na página do Django Girls.
4-
O tutorial original pode ser dividido em duas partes: preparação do ambiente e trabalho direto com programação e Python. Mas a primeira parte, a instalação dos programas, era difícil e costumava dar vários tipos de erro, então, nos últimos eventos, temos optado por usar o Codeanywhere (leia mais sobre ele no próximo capítulo!). Por isso o tutorial precisou ser levemente adaptado, tirando partes desnecessárias ou que causavam problema no Codeanywhere.
4+
O tutorial original pode ser dividido em duas partes: preparação do ambiente e trabalho direto com programação e Python. Mas a primeira parte, a instalação dos programas, era difícil e costumava dar vários tipos de erro, então, nos últimos eventos, temos optado por usar o Sourcelair (leia mais sobre ele no próximo capítulo!). Por isso o tutorial precisou ser levemente adaptado, tirando partes desnecessárias ou que causavam problema no Sourcelair.
55
Mas não se preocupe, o objetivo final continua o mesmo! Você vai sair da oficina com seu blog no ar e uma ótima introdução ao mundo da programação!

amplie_sua_aplicacao/amplie_sua_aplicacao.md

+14-14
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ blog/templates/blog/post_list.html
3939

4040
`blog.views.post_detail` é um caminho para uma *view* `post_detail` que queremos criar. Preste atenção: `blog` é o nome da sua aplicação (o diretório `blog`), `views` vem do nome do arquivo `views.py` e, a última parte - `post_detail` - é o nome da *view*.
4141

42-
Agora quando formos para: `http://<<sua_url>>.codeanyapp.com:8080/` teremos um erro (como esperado, já que não temos uma URL ou uma *view* para `post_detail`). Vai se parecer com isso:
42+
Agora quando formos para sua página inicial, teremos um erro (como esperado, já que não temos uma URL ou uma *view* para `post_detail`). Vai se parecer com isso:
4343

4444
![NoReverseMatch error](images/no-reverse-match-error.png)
4545

@@ -48,34 +48,34 @@ Agora quando formos para: `http://<<sua_url>>.codeanyapp.com:8080/` teremos um e
4848

4949
Vamos criar a URL em `urls.py` para a nossa *view* `post_detail`!
5050

51-
Nós queremos que nosso primeiro detalhe de postagem seja exibido através dessa **URL**: http://<<sua_url>>.codeanyapp.com:8080/post/1/
51+
Nós queremos que nosso primeiro detalhe de postagem seja exibido através dessa **URL**: http://<<sua_url>>/post/1/
5252

53-
Vamos criar uma URL no arquivo `blog/urls.py` para direcionar o Django para uma *view* de nome `post_detail`, que irá exibir uma postagem de blog completa. Adicione a linha `url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),` ao arquivo `blog/urls.py`. O arquivo deve ficar dessa forma:
53+
Vamos criar uma URL no arquivo `blog/urls.py` para direcionar o Django para uma *view* de nome `post_detail`, que irá exibir uma postagem de blog completa. Adicione a linha `path(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),` ao arquivo `blog/urls.py`. O arquivo deve ficar dessa forma:
5454

5555
blog/urls.py
56-
```p
57-
from django.conf.urls import url
58-
from . import views
56+
```
57+
from django.urls import path
58+
from blog import views
5959
6060
urlpatterns = [
61-
url(r'^$', views.post_list),
62-
url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'),
61+
path('', views.post_list),
62+
path(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail')
63+
]
64+
6365
```
6466

6567
O trecho ``^post/(?P<pk>\d+)/$`` parece assustador, mas não se preocupe – nós iremos explicar ele para você:
6668
- ele começa com `^` novamente - "o início".
6769
- `post/` apenas significa que após o início, a URL deve ter a palavra __post__ e um __/__. Até aqui, tudo bem.
68-
- `(?P<pk>\d+)` - essa parte é mais complicada. Isso significa que o Django vai pegar tudo que você colocar aqui e transferir para uma view através de uma variável chamada `pk`. `\d` também nos diz que só pode ser um número, não uma letra (tudo entre 0 e 9). `+` significa que precisa existir um ou mais dígitos. Então, algo como `http://<<sua_url>>.codeanyapp.com:8080/post//`, não é válido, mas `http://<<sua_url>>.codeanyapp.com:8080/post/1234567890/` é perfeitamente ok!
70+
- `(?P<pk>\d+)` - essa parte é mais complicada. Isso significa que o Django vai pegar tudo que você colocar aqui e transferir para uma view através de uma variável chamada `pk`. `\d` também nos diz que só pode ser um número, não uma letra (tudo entre 0 e 9). `+` significa que precisa existir um ou mais dígitos. Então, algo como `http://<<sua_url>>/post//`, não é válido, mas `http://<<sua_url>>/post/1234567890/` é perfeitamente ok!
6971
- `/` - então precisamos de um __/__ outra vez.
7072
- `$` - "o fim"!
7173

72-
Isso significa que, se você digitar `http://<<sua_url>>.codeanyapp.com:8080/post/5/` em seu navegador, Django vai entender que você está procurando uma *view* chamada `post_detail` e transferir a informação de que `pk` é igual a `5` para aquela *view*.
74+
Isso significa que, se você digitar `http://<<sua_url>>/post/5/` em seu navegador, Django vai entender que você está procurando uma *view* chamada `post_detail` e transferir a informação de que `pk` é igual a `5` para aquela *view*.
7375

7476
`pk` é uma abreviação para `primary key` (chave primária). Esse é o nome geralmente usado nos projetos feitos em Django. Mas você pode dar o nome que quiser às variáveis (lembre-se: minúsculas e `_` ao invés de espaços em branco!). Por exemplo em vez de `(?P<pk>\d+)` podemos ter uma variável `post_id`, então esta parte ficaria como: `(?P<post_id>\d+)`.
7577

76-
OK, nós adicionamos um novo padrão de URL ao `blog/urls.py`! Vamos atualizar a página: `http://<<sua_url>>.codeanyapp.com:8000/` Boom! O servidor parou de funcionar novamente. Dê uma olhada no console – como esperado, temos outro erro!
77-
78-
![AttributeError](images/attribute-error.png)
78+
OK, nós adicionamos um novo padrão de URL ao `blog/urls.py`! Vamos atualizar a página: `http://<<sua_url>>` Boom! O servidor parou de funcionar novamente. Dê uma olhada no console – como esperado, temos outro erro!
7979

8080
Você se lembra qual é o próximo passo? Claro: adicionar uma view!
8181

@@ -120,7 +120,7 @@ def post_detail(request, pk):
120120
return render(request, 'blog/post_detail.html', {'post': post})
121121
```
122122

123-
Sim. Está na hora de atualizar a página: http://<<sua_url>>.codeanyapp.com:8080/
123+
Sim. Está na hora de atualizar sua página inicial.
124124

125125
![Post list view](images/listando-postagens.png)
126126

css/bootstrap.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ blog/templates/blog/post_list.html
1919
Isso não adiciona nenhum arquivo ao seu projeto. O código apenas aponta para arquivos que existem na internet. Apenas siga em frente, abra seu site e atualize a página. Veja como está!
2020

2121

22-
![Página usando Bootstrap](bootstrap.png)
22+
![Página usando Bootstrap](images/bootstrap.png)
2323
Já parece mais bonito!

css/estaticos_do_django.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ Django já sabe onde encontrar os arquivos estáticos para o app padrão "admin"
88

99
Fazemos isso através da criação de uma pasta chamada `static` dentro do aplicativo do blog:
1010

11-
afropython
1211
├── blog
1312
│ ├── migrations
1413
│ ├── static
1514
│ └── templates
16-
└── mysite
15+
└── afropython
1716

1817

1918
Django encontrará automaticamente todas as pastas chamadas "static" dentro de qualquer uma das pastas dos seus apps, e será capaz de usar seu conteúdo como arquivos estáticos.

css/primeiro_arquivo_css.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
Vamos criar um arquivo CSS agora, para adicionar seu próprio estilo para sua página da web. Crie um novo diretório chamado `css` dentro de seu diretório `static`. Em seguida, crie um novo arquivo chamado `blog.css` dentro do diretório `css`. Pronto?
44

5-
afropython
6-
└─── blog
7-
└─── static
8-
└─── css
9-
└─── blog.css
5+
blog
6+
└─── static
7+
└─── css
8+
└─── blog.css
109

1110

1211
Hora de escrever CSS! Abra o arquivo `static/css/blog.css` no seu editor de código.
@@ -80,6 +79,8 @@ blog/templates/blog/post_list.html
8079

8180
OK, salve o arquivo e atualize o site!
8281

82+
> Dica: se nada acontecer, tente reinicar o servidor. Abra a Command Pallete pelo ícone no menu lateral, procure por `Restart Server` e aperte Enter.
83+
8384
![Blog com as cores do AfroPython](images/blog-com-cores-afropython.png)
8485

8586
Bom trabalho! Talvez a gente também queira dar um pouco de ar ao nosso site e aumentar a margem do lado esquerdo? Vamos tentar!

estendendo_templates/estendendo_templates.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,4 @@ blog/templates/blog/post_list.html
139139

140140
É isso! Veja se o seu site ainda está funcionando direito :)
141141

142-
> Se ocorrer um erro de `TemplateDoesNotExists`, que diz que não existe nenhum arquivo chamado `blog/base.html` e se você tiver o `runserver` executando no terminal, tenta interrompê-lo (precionando Ctrl+C - o botão Control mais o botão C juntos) e reinicie ele rodando o comando `python3 manage.py runserver 0.0.0.0`.
142+
> Se ocorrer um erro de `TemplateDoesNotExists`, que diz que não existe nenhum arquivo chamado `blog/base.html`, tente reiniciar o servidor. Abra a Command Pallete pelo ícone no menu lateral, procure por `Restart Server` e aperte Enter.

formularios/botao_editar.png

44.7 KB
Loading

formularios/editando_formularios.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Em `blog/urls.py` adicionamos esta linha:
3333

3434
blog/urls.py
3535
```python
36-
url(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'),
36+
path(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'),
3737
```
3838

3939
Nós reutilizaremos o modelo `blog/templates/blog/post_edit.html`, então a última coisa que falta é uma *view*.
@@ -73,11 +73,11 @@ form = PostForm(instance=post)
7373

7474
Ok, vamos testar se funciona! Vamos para a página `post_detail`. Deve haver um botão editar no canto superior direito:
7575

76-
![Botão editar](edit_button2.png)
76+
![Botão editar](botao_editar.png)
7777

7878
Quando você clicar nele você verá o formulário com a nossa postagem:
7979

80-
![Editando o formulário](edit_form2.png)
80+
![Editando o formulário](editar.png)
8181

8282
Sinta-se livre para mudar o título ou o texto e salvar as mudanças!
8383

formularios/editar.png

65.3 KB
Loading

formularios/introducao.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,4 @@ blog/templates/blog/base.html
8282
</html>
8383
```
8484

85-
Depois de salvar e recarregar a página `http://<<sua_url>>.codeanyapp.com:8080/` você verá, obviamente, um erro familiar: `NoReverseMatch`, certo?
85+
Depois de salvar e recarregar sua página, você verá um erro familiar: `NoReverseMatch`, certo?

formularios/novo_post.png

82.5 KB
Loading

formularios/salvando_formularios.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,8 @@ def post_new(request):
7777
return render(request, 'blog/post_edit.html', {'form': form})
7878
```
7979

80-
Vamos ver se funciona. Vá para o página `http://<<sua_url>>.codeanyapp.com:8080/post/new/`, adicione um `title` e o `text`, salve... e voilà! O novo blog post é adicionado e nós somos redirecionados para a página de `post_detail`!
80+
Vamos ver se funciona. Vá para o página `http://<<sua_url>>/post/new/`, adicione um `title` e o `text`, salve... e voilà! O novo blog post é adicionado e nós somos redirecionados para a página de `post_detail`!
8181

8282
Isso é incrível!
8383

84-
> Como nós recentemente usamos a interface de administração do Django, o sistema ainda pensa que nós estamos "logados". Existem algumas situações que poderiam nos levar a estar "deslogados" (fechando o browser, reiniciando o banco de dados, etc.). Se, durante a criação de uma postagem, você perceber que está recebendo erros referentes a falta de um usuário "logado", vá para a página de administração http://<<sua_url>>.codeanyapp.com:8080/admin e faça o login novamente. Isso resolverá o problema temporariamente.
85-
86-
![Erro de login](post_create_error.png)
84+
> Como nós recentemente usamos a interface de administração do Django, o sistema ainda pensa que nós estamos "logados". Existem algumas situações que poderiam nos levar a estar "deslogados" (fechando o browser, reiniciando o banco de dados, etc.). Se, durante a criação de uma postagem, você perceber que está recebendo erros referentes a falta de um usuário "logado", vá para a página de administração http://<<sua_url>>/admin e faça o login novamente. Isso resolverá o problema temporariamente.

formularios/template.md

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ Precisamos criar um arquivo `post_edit.html` na pasta `blog/templates/blog`. Pra
55
- Temos que exibir o formulário. Podemos fazer isso com (por exemplo) um simplesmente {% raw %}`{{ form.as_p }}`{% endraw %}.
66
- A linha acima precisa estar entre as tags HTML form: `<form method="POST">...</form>`
77
- Precisamos de um botão `Salvar`. Fazemos isso com um botão HTML: `<button type="submit">Save</button>`
8-
- E finalmente, depois de abrir a tag `<form ...>` precisamos adicionar um {% raw %}`{% csrf_token %}`{% endraw %}. Isso é muito importante, pois faz com que nosso formulário seja seguro! O Django vai reclamar se você esquecer de adicionar isso e tentar salvar o formulário:
9-
10-
![CSFR Página Proibida](csrf2.png)
8+
- E finalmente, depois de abrir a tag `<form ...>` precisamos adicionar um {% raw %}`{% csrf_token %}`{% endraw %}. Isso é muito importante, pois faz com que nosso formulário seja seguro! O Django vai reclamar se você esquecer de adicionar isso e tentar salvar o formulário.
119

1210
Beleza, então vamos ver como ficou o HTML `post_edit.html`:
1311

@@ -26,7 +24,7 @@ blog/templates/blog/post_edit.html
2624

2725
Hora de atualizar! Há! Seu formulário apareceu!
2826

29-
![Formulário novo](new_form2.png)
27+
![Formulário novo](novo_post.png)
3028

3129
Mas, espere um minuto! Quando você digita alguma coisa nos campos `title` e `text` e tenta salvar, o que acontece?
3230

formularios/url_e_views.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@ Vamos abrir o arquivo `blog/urls.py` e escrever:
44

55
blog/urls.py
66
```python
7-
url(r'^post/new/$', views.post_new, name='post_new'),
7+
path(r'^post/new/$', views.post_new, name='post_new'),
88
```
99

1010
O código final deve se parecer com isso:
1111

1212
blog/urls.py
1313
```python
14-
from django.conf.urls import url
15-
from . import views
14+
from django.urls import path
15+
from blog import views
1616

1717
urlpatterns = [
18-
url(r'^$', views.post_list, name='post_list'),
19-
url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'),
20-
url(r'^post/new/$', views.post_new, name='post_new'),
18+
path('', views.post_list),
19+
path(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'),
20+
path(r'^post/new/$', views.post_new, name='post_new'),
2121
]
2222
```
2323

formularios/validacao.png

61.8 KB
Loading

formularios/validacao_formularios.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ Agora, nós lhe mostraremos como os formulários são legais. A postagem do blog
44

55
Tente salvar o formulário sem `title` e `text`. Adivinhe o que vai acontecer!
66

7-
![Validação de formulário](form_validation2.png)
7+
![Validação de formulário](validacao.png)
88

99
Django está tomando conta da validação de todos os campos de nosso formulário, certificando que estão corretos. Não é incrível?

linha_de_comando/basico.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# O básico
22

3-
Cada sistema operacional tem o seu próprio conjunto de instruções para a linha de comando, mas no codeanywhere usamos um sistema Linux.
3+
Cada sistema operacional tem o seu próprio conjunto de instruções para a linha de comando, mas no sourcelair usamos um sistema Linux.
44

55
Para informações de outros sistemas, acesse [Introdução à linha de comando](https://tutorial.djangogirls.org/pt/intro_to_command_line/) do [Tutorial Django Girls](https://tutorial.djangogirls.org/pt/).

linha_de_comando/resumo.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Aqui vai uma lista de alguns comandos úteis:
44

5-
| Comando (Windows)|Comando (MacOS/Linux/Codeanywhere)| Descrição | Exemplo |
5+
| Comando (Windows)|Comando (MacOS/Linux/Sourcelair)| Descrição | Exemplo |
66
|:----------------:|:-------------------:| -------------- |--------------|
77
| exit | exit | Fecha a janela | **exit** |
88
| cd | cd | Muda a pasta | **cd teste** |

0 commit comments

Comments
 (0)