Transcrições
1. Welcome boas-vindas ao Django): Olá e bem-vindo ao Django 200 um. Neste curso vamos criar um aplicativo bastante grande chamado Today, eu aprendi. E neste aplicativo você vai ser capaz de logout, exceto novos usuários, novas inscrições. Você poderá criar novas postagens usando o ajax. Por exemplo, olá mundo com um pouco de coração lá. E ele aparece “Olá mundo”. Você pode até ver essa página como uma página detalhada e, em seguida, compartilhar esse link se você quiser, haverá contas detalhadas. Perfis de usuário é outro termo para isso. Assim, perfis de usuário que você pode seguir e deixar de seguir as pessoas também. E há um pouco de lição de casa entre várias aulas lá. Então você pode fazer muito do trabalho que você pode me seguir exatamente. Mas no final, eu também vou empurrá-lo para fazer um pouco sozinho também. Agora a coisa boa aqui é que ele também vai aceitar uma nova visão de criação. Então vamos em frente e abrir em nova guia, nova criar vista, helloworld para, para, para, para, para. E ele aparece com olá para 2.2.2. Agora eu propositadamente introduzi alguns bugs aqui e ali que eu quero que você resolva também. E isso vai ser uma ótima experiência para quando você for um desenvolvedor profissional do mundo real e estiver escrevendo Django todos os dias. Oi, eu sou Caleb contando e eu tenho escrito Django por um número de anos agora. Eu sou um desenvolvedor web profissional e eu escrevo Django todos os dias para viver. Trabalhei com clientes como a NASA, o NHS, a Mozilla, os samaritanos e muitas outras organizações por aí, tanto locais como organizações realmente grandes também. Então, quem está usando o Django? Os gostos de instagram, YouTube, Pinterest discutem um monte de grandes, grandes empresas estão usando o Django e ele é apoiado pelo Python, que é realmente, muito poderoso. Agora, para tirar o máximo proveito deste curso, você vai precisar conhecer Python. Vais precisar de conhecer um Python muito forte. Porque vamos escrever exibições baseadas em classe. E vistas baseadas em classes basicamente só significa que vamos escrever programação orientada a objetos. Vamos escrever aulas. E então você vai, você vai precisar saber como as aulas funcionam. E se você já está um pouco familiarizado com as aulas, mas você não é super familiar. Isso está totalmente bem. Você terá muita prática com as aulas neste curso. Também vamos começar do zero. E eu não vou presumir que você saiba de alguma coisa. Então, se você nunca fez um curso de Django, discurso ainda é para você. Pode ser um pouco rápido e você
ainda pode querer ir e verificar, oh jingle, um-para-um. Mas este curso ainda seria viável para você. Olá, Eu sou Caleb italiano e obrigado por verificar meu Django 200, uma classe onde fazemos um Today I Aprendi app e espero vê-lo dentro.
2. Criando um ambiente virtual: Ok, bem-vindo à primeira lição no Django 201A. Primeiro, precisamos criar um ambiente virtual. Então, há algumas maneiras diferentes de fazermos isso. Mas antes de qualquer coisa, vamos em frente e criar uma nova pasta. Então o que eu vou fazer é criar um novo arquivo aqui. Vou chamá-lo de test.py salvar. Vou para a minha área de trabalho e chamar este django 200 um. Parece que não fez nada, mas o que posso fazer agora é abrir arquivo. E eu posso realmente selecionar esta pasta inteira. E vai abri-la aqui à esquerda. Agora podemos ver test.py. Vou apagar isso. Só queria abrir a pasta à esquerda. E o que eu posso fazer agora é ir para o View e eu quero abrir meu terminal. Não, essa foi a errada, mas os terminais ali. E há algumas maneiras diferentes de fazer isso. Então vamos em frente e desmoronar isso. E eu vou fazer isso um pouco maior. Amplie, em todo o caminho. E assim podemos fazer qualquer coisa em termos de ambientes virtuais. Podemos usar um suplemento PIP, que eu vou usar neste módulo particular no Django para um. Ou podemos usar Python traço m, então podemos usar um V regular e V a. Então poderíamos usar Docker se quiséssemos ou vagrant ou wrapper env virtual. O que eu vou fazer é simplesmente, simplesmente usar pip para começar. Então, se você não tem Pip, Pip, mostre Pip env. E você já deve ter PIP e tudo mais porque você é um desenvolvedor Python e já conhece um pouco de django básico. Então você deve ter PIP. Agora, eu tenho pip 20, f.11 ponto 15 instalado. Realmente não importa qual versão você tem, desde que seja uma versão mais atualizada. Se você não vê isso, se parece com algo assim,
isso vai dizer desaparecido, você está realmente infectada, não vai dizer nada. Então, se você não vê nada, o que você precisa fazer é pip install Pip env. E já me diz que a exigência foi satisfeita. Então agora eu posso ir em frente e eu vou limpar este tipo de pip install Django. E isso vai continuar e criar um novo ambiente de quadril para mim. E ele vai instalar o Django, como podemos ver no canto inferior esquerdo lá diz instalar o Django e é um pouco carregando coisas e travando. E agora para entrar em um ambiente virtual, podemos fazer Pip env shell. E agora você pode ver que estamos dentro do nosso ambiente Pip. Podemos fazer pip show Django, e isso vai nos mostrar seu site Django. Agora isso é apenas criar um ambiente virtual. Ainda não vamos configurar o Django. Vamos fazer isso no próximo vídeo. Agora, para sair do seu controle C ou Control D deve simplesmente tirá-lo de lá. Caso contrário, se você quiser, você sempre pode fazer Python traço m ponto VN. E esta é uma outra maneira. Sim, olha para isso. Vs Code é inteligente o suficiente para perceber o que estava acontecendo lá. Então podemos fazer e não Python, mas queremos fazer o ponto fonte v1, esse é o nome da pasta. E, em seguida, ativar e isso nos leva para dentro daqui. E então podemos fazer pip show Django por exemplo. Agora, eu não vou usar uma venn, eu vou estar usando Pippen, mas você pode usar o que quiser. Ou, novamente, você pode usar o Docker ou qualquer outro sistema que você realmente preferir. Então, vou desativar-me para sair daqui. Pip, Pip vai me colocar de volta e só para provar que eu tenho uma célula genuína que pode fazer pip, mostrar Django. E isso realmente não funcionou. Acho que Yahya, fizemos algo engraçado aqui. Precisamos porque eu tenho dois ambientes virtuais aqui e eles estão conflitantes. Na verdade, estou muito feliz que isso tenha aparecido. Quero dizer, vou ter que deletar um deles. Então o que eu vou fazer é RM traço R, ponto F. E depois voltar para dentro e nós apenas fazer shell preventiva. Agora, se você encontrar algo que diz algo ao longo
das linhas já está ativado. E você não pode entrar nisso. Podemos simplesmente fechar o terminal e reabrir um novo. E então você pode fazer uma concha preventiva e isso vai te colocar de volta lá. Às vezes, o código VS faz essa coisinha estranha onde ele pensa que ainda está dentro de um ambiente virtual, mas na verdade não está. Então essa é a maneira de contornar isso. Portanto, certifique-se de que tem um ambiente virtual instalado. Na próxima lição, vamos avançar e começar um novo projeto do Django.
3. Começando um novo projeto do Django: Tudo bem, vamos em frente e realmente começar um projeto Django. Então, se eu mostrar os arquivos que tenho aqui à esquerda, não
há muito aqui. Eu tenho um arquivo Pip e um arquivo Pip, dot loc. Primeiro de tudo, vamos em frente e entrar no nosso ambiente Pip. Não importa que tipo de ambiente você está usando, você só precisa estar dentro dele. Estou usando Pippin só porque é agradável e fácil. E aqui dentro nós queremos fazer Pip show Django. Agora, se você não tem o Django, você sempre pode fazer pip install Django e isso irá simplesmente instalar o Django para você. Não vou fazer isso porque já o tenho. Não, arranhe isso. Vou mostrar-te como é. Não faz nada porque eu já o tenho. Então, porque temos Jenga, o que podemos fazer é Django dash admin, start project. E isso vai ser TIL envia para hoje, Eu aprendi TIL. Agora você pode ver que criou uma pasta para nós aqui chamada TIL. Ele tem conseguido até alto e outras coisas nele. Na verdade, o que eu quero fazer é jogar
isso na mesma pasta que eu já estou com meu arquivo Pip e arquivo Pip dot loc. E então o que eu vou fazer é o mesmo comando, Django, dash admin, iniciar o projeto TIL espaço e, em seguida, apenas bater um ponto. E isso vai instalar um projeto diretamente na minha pasta aqui. Então ele não vai criar uma pasta chamada TIL, ele vai criar um projeto chamado TIL dentro da minha pasta atual. Então vamos gerenciar dot pi está ao lado do meu arquivo Pip e compilado dot loc. Só gosto porque é um a menos. Qual é a palavra que estou procurando? Diretórios um diretório, portanto, é uma pasta a menos para lidar. Agora, neste momento, podemos ir em frente e podemos executar nosso aplicativo. Podemos fazer todo tipo de coisas dentro do Django. Assim, por exemplo, podemos escrever Python gerenciado up.py executar servidor 0.0.0 ponto 0 dois pontos 8 mil. E isso vai me dizer que temos uma migração aplicada agora você já deve estar familiarizado com o Django. Nesse caso, você deve ser capaz de executar suas migrações. Você simplesmente faz Python gerenciar dot py migrar, e isso vai executar suas migrações. Isso simplesmente provisiona este arquivo db.json para nós. E então podemos executar nosso servidor novamente. Não vemos mais esse erro. E vamos em frente e abrir localhost cólon 8 mil em qualquer navegador que você quiser. E você deve ver esta página. Uma vez que você tem esta página, você está funcionando com o Django, simples assim. Na próxima lição, vamos em frente e adicionar alguns Git ignore, ignorar coisas para que se você estiver usando Git e você provavelmente deve estar usando Git e GitHub, GitLab ou Bitbucket ou algum tipo de controle de versão que não enviar acidentalmente arquivos como o nosso db.json realce três arquivo.
4. Como adicionar um arquivo .gitignore: Ok, então se você estiver usando o Git, podemos fazer um status git aqui e podemos ver que temos este arquivo db.json final três. Agora, se você acabou de começar a usar o Git, você vai querer usar o git init. E isso só vai criar um repositório Git dentro de, bem, não realmente um repositório completo, mas ele vai ativar entrar no seu projeto para você. E em vez do que você vê aqui e obter o status de apenas db.json H3. Você vai ver todos os arquivos aqui, incluindo o seu db.json H3. E o que queremos fazer é ignorar este arquivo e um monte de outros arquivos também. Então o que vamos fazer é aqui vamos criar um novo arquivo chamado
um ponto para GIT IG e ORE dot git ignore. E se eu apenas deslizar um pouco para baixo, quero dizer, não uma cola um monte de coisas aqui. E você pode obter isso direito a partir do código-fonte é enquanto há muitas linhas para
percorrer e está realmente apenas cobrindo um monte de cenários diferentes. Python muitas vezes criará um diretório chamado cache pi. Por exemplo. Nós não queremos ter como disco, rodas
var, todo tipo de coisas aqui. Isto é apenas configurações padrão de HTML e Python e todos os tipos de coisas, mas podemos ver o Django enchendo aqui. Aqui está um pouco mais aplicável ao que estamos escrevendo. DB.json x3 e db.json três traço diário. Isso garantirá que esses arquivos não sejam adicionados acidentalmente a um repositório. Então, se eu estraguei tudo de novo, vamos salvar esse gitignore e eu posso fazer um status git. Vamos ver se Gitignore não está aqui, mas db.json A3 não está lá. E isso é exatamente o que queremos. E assim, no futuro, estaremos ignorando todo tipo de coisas. Mas, por enquanto, só queremos ignorar as coisas mais comuns, como aberturas de ventilação. Nós absolutamente não por qualquer motivo, queremos comprometer todo o nosso ambiente virtual, um arquivo Pip e IPIP file.js. Ok, isso é totalmente bom. Não há muito conteúdo aqui. E isso vai ficar tudo bem. Mas se você usasse um ambiente virtual, um v e v, então você teria uma pasta inteira com muitos arquivos lá que você poderia cometer acidentalmente. E isso só significa que alguém é suficiente para baixar muito mais, muito mais conteúdo do GitHub mais tarde. E isso é só um pé no saco. E eles vão se deparar com os problemas de versionamento e é apenas, é difícil. Então, em vez disso, somos ignorados essas coisas. E uma das coisas que queremos ser ignoradas, e você pode ver que isso está realmente acinzentado agora é meu db.json A3. E isso é só porque quando eu criar um usuário, ele vai ter minha senha lá dentro. Ele vai ser criptografado, mas ainda vai ter minha senha criptografada lá e isso não é bom. Não queremos, não queremos colocar isso em lugar algum. Queremos manter isso no seu computador, mantê-lo agradável e seguro. Neve. Você pode ir em frente e fazer git, adicionar dot git ignore. E então você pode fazer git commit e, em seguida, sua mensagem. E eu vou cometer isso. E na próxima lição vamos avançar com a configuração do nosso primeiro aplicativo dentro do Django.
5. Seu primeiro aplicativo: Tudo bem, vamos em frente e começar nosso primeiro aplicativo. Então, se fizermos isso, fazemos Pip nth, devemos entrar dentro de nosso ambiente virtual, nós executamos Python gerenciado servidor high-run, 0.0.0 que eu perdi um ponto 0 dois pontos 8 mil de qualquer maneira, isso vai nos permitir, se abrirmos meu navegador aqui, Firefox, você pode ver que nossos sites estão funcionando. E se formos para cortar Admin, devemos ser capazes de fazer login. Ainda não temos um registro em log, então vamos em frente e criar um login. Então vamos voltar para o nosso terminal. E o que vou fazer é abrir uma divisão aqui. Então eu vou ter jangle correndo à esquerda e eu
vou escrever e executar alguns comandos à direita. Então eu posso fazer Pip Shell para voltar para dentro daqui. E eu posso fazer Python gerenciar dot py, criar super usuário. E o que isso vai fazer é me pedir um nome de usuário. Vou dizer que o meu nome de utilizador é Caleb Kilobyte. Caleb dot IO. A senha vai ser qualquer que seja a minha senha. E é exatamente por isso que nós não cometemos nossos arquivos SQ Lite é porque eu acabei de digitar uma senha lá. Não quero que alguém seja capaz de tentar decifrar essa senha. Se é uma boa senha ou não, não importa. Não quero que alguém saiba essa senha. Então vamos voltar aqui. E criei um usuário chamado Caleb com uma senha de Guam e vou dizer isso. E isso me coloca no meu administrador do Django. E agora podemos gerenciar grupos e usuários, entrar em usuários. E eu posso me virar sozinho. Sou o único usuário lá. Ok, então agora temos um Django Admin criado, um super usuário criado. Vamos em frente e criar nosso primeiro aplicativo. Então, para criar nosso primeiro aplicativo, o que precisamos fazer é talvez eu possa, sim, vamos fazer isso um pouco mais. Python gerenciado dot py, iniciar aplicativo, não iniciar projeto, é iniciar aplicativo. E então vamos chamar esse feed de aplicativo. Se fizermos um status git aqui podemos ver que temos uma nova pasta chamada Feed. Tivemos uma nova pasta aqui chamada feed, e tem todo o tipo de coisas nele. Vamos em frente e abrir. Hoje eu aprendi e nossas configurações e configurações internas, devemos ver aplicativos instalados aqui. Aplicativos instalados e logo abaixo do material do Django, nós só queremos digitar feed. E isso é simplesmente corresponde ao nome da pasta aqui. E, de fato, se entrarmos em aplicativos, podemos ver aplicativos dot pi dentro de nosso feed. A configuração do feed ou o APP_CONFIG. Seu nome é chamado feed, e é por isso que estamos chamando de feed dentro de aplicativos instalados. Agora, com esses arquivos KMZ, como suas visualizações, modelos de teste, Aplicativos, administrador init, migrações com um arquivo init vazio dentro dele. Esse é um aplicativo padrão do Django. Neste ponto, você ainda deve estar familiarizado com isso. Eu vou em frente e cometer isso e então nós vamos passar para
a próxima lição onde nós criamos nosso primeiro modelo chamado post.
6. Seu primeiro modelo: Ok, bem-vindo de volta. Então aqui eu tenho muita coisa acontecendo na tela. Tenho todos os meus arquivos à esquerda. Eu tenho a minha edição no topo, no canto superior direito, no meio inferior aqui temos o Django rodando. E no canto inferior direito é onde eu vou estar executando um monte de comandos e a qualquer momento, eu posso simplesmente mover isso para cima. E se você está apenas sintonizando agora e você está tipo, oh, hey, como você, como você conseguiu isso? Tudo o que eu tenho que fazer é pegar uma tela dividida é clicar neste pequeno ícone dividido aqui, aqui. Então nesta lição, o que eu quero fazer é que eu queria abrir modelos dot py, e eu quero criar um novo modelo. Agora este modelo vai ser bastante ossos nus para começar, e nós vamos adicionar a ele um pouco mais tarde. Então vamos fazer modelos de classe Post, modelo de ponto, e isso vai criar um novo modelo, um novo não são
um banco de dados, mas uma nova tabela dentro do nosso banco de dados. E queremos dar-lhe um texto é igual a modelos ponto, não TextField, campo char. E porque hoje eu aprendi nesta aplicação vai ser muito parecido com o Twitter, onde você pode realmente só postar um certo número de caracteres. Então, digamos que você só pode postar algo como 240 caracteres. Maxlength é igual a 240. E a idéia é que você simplesmente postar o que você aprende hoje e todos outros podem seguir e ver o que você aprende hoje e você pode dizer ao resto do mundo, mas o que você aprende, todo tipo de coisas assim. Então vamos em frente e criar um novo na verdade, vamos pular isso por um segundo. Quero mostrar-te como isto funciona. Então temos este novo modelo de postagem. Vamos em frente e datilografar. Primeiro de tudo, vamos, lá vamos nós. Isso é um pouco mais visível lá. Python gerenciado dot pi e eu estou dentro do meu ambiente virtual agora. Faça migrações. E o que isso vai fazer é criar um novo arquivo de migração chamado inicial. E o que isso vai fazer é que não tem dependências. E isso simplesmente vai dizer, hey Django, quando você executar este arquivo em Python, cria um novo modelo chamado post, e ele tem campos id e texto nele. Portanto, cada publicação tem um ID por padrão, mesmo que não o tenhamos especificado. E dissemos que modelos de texto caracterizam o comprimento do campo de 240. Modelos de texto caracterizam o comprimento do campo de 240. Agora, isso é fixe. Isso só fez o arquivo que realmente não fez nada. Vamos em frente e digite Python gerenciado dot py migrate. E o que isso vai fazer é executar esse arquivo para nós. E você pode ver que diz que aplicando feed 001 sublinhado inicial, tudo estava bem. Agora, um pouco mais tarde, quando olharmos para esses posts em nosso admin, vamos ver que isso aparece como um nome engraçado. E quando chegarmos a esse ponto, vamos mudar como esse nome realmente se parece. Mas por enquanto, eu disse que vamos resolver isso agora mesmo. Na verdade, vamos lidar com isso no futuro, quando chegarmos a ele. Então vamos resolver as coisas um por um à medida que surgirem problemas. E isso é muito parecido com a forma como programamos na vida real. Então isso é tudo o que precisamos fazer para esta lição em particular. Tudo o que precisávamos fazer era criar um novo modelo chamado post. Dê-lhe um campo chamado textos onde o comprimento máximo de 240. E então nós, Python conseguiu fazer migrações altas. Python gerenciado até alta migração. E estamos prontos para ir.
7. Registrando seu modelo no administrador do Django: Tudo bem, digamos que queremos ser capazes de gerenciar posts através de nosso admin do Django. Então nós entramos em nosso Django Admin e
não vemos posts lá e precisamos agora registrar isso. Então o que podemos fazer é em nosso feed, em nosso admin dot py e ele tem que ir neste arquivo. É onde o Django está procurando. É em primeiro lugar, vamos dizer a partir de modelos DOT post importação. E estamos dizendo modelos de ponto, ponto sendo esta pasta particular, modelos sendo o módulo ou arquivo. Então vamos fechar isso. Admin dot py dizendo esta pasta particular aqui,
e, em seguida, olhar para modelos acima de cima aqui, importar, postar. E então podemos registrar o modelo aqui. E registrar-se é muito fácil. Vamos usar uma forma simples de registro. Então nós vamos fazer classe post admin, admin,
dot Model, admin, admin, se eu puder soletrar isso direito. E não vamos adicionar nenhuma configuração a ele. Ainda não, de qualquer maneira, se você quiser, você pode definitivamente ir dar uma olhada nos documentos do Django e adicionar suas próprias configurações. Mas, por enquanto, só queremos que tudo seja acessível e há apenas um campo neste post model em particular. Então não é como se pudéssemos realmente fazer muito. Então agora precisamos dizer Admin Register site e precisamos conectar esses dois. Precisamos conectar post com post admin, e isso vai conectar nosso post. Aqui está o modelo Models.swift com nossos posts Admin, que está usando admin, dot Model admin. Então vamos em frente e salvar isso. E vamos refrescar-nos aqui. E lá vemos feed e posts, e ainda não temos nenhuma postagem lá. Vamos em frente e criar nosso primeiro post. Nosso primeiro post, salvar. E diz “post objeto um”. Esta é a coisa estranha que eu estava falando na última lição. Vamos em frente e realmente mudar isso. E isso é muito fácil de fazer. Tudo o que temos que fazer é abrir nosso modelo. Prever. E dentro de nossa classe post aqui lembre-se recuo é importante. TR surdo, eu, isso é dois sublinhados lado a lado. Então sublinhado, sublinhado, STR, sublinhado, sublinhado auto porque cada, cada método em uma classe Python sempre toma self como seu primeiro parâmetro por padrão. Então podemos dizer retorno auto-ponto texto. E vamos truncar isso para ser como os primeiros 100 caracteres. E espere que o Django recarregue. E lá vamos nós. Diz o nosso primeiro post. E vamos fazer isso editado. Salve isso. E diz “editado”. Lá vamos nós. Nós agora registramos nosso modelo de post com o administrador do Django.
8. Adição de um DateTimeField às Posts: Tudo bem, bem-vindo de volta. Temos um post e temos algum texto nele. Não sabemos quem escreveu este post, vamos adicioná-lo mais tarde. E não sabemos a que horas o post foi criado. Então vamos em frente e antes de tudo, adicione a data. Adicionar os dados vai ser muito mais simples. Então o que queremos fazer aqui é abrir o código do Visual Studio. E em nossos modelos dot py file, onde nosso post é nossa classe post, queremos dizer data é igual a modelos dot datetime campo, não um campo de data. Um campo de data vai ser apenas o dia. Um campo de data e hora será a data, o ano, mês, dia, mais a hora, minutos segundos. E aqui queremos dizer que auto agora é igual a verdadeiro. Então, toda vez que criamos um novo post, basta dizer que esse post foi criado neste momento específico. Então não temos que fazer nada. Django vai cuidar disso para nós. Não temos que nos preocupar em atualizá-lo ou inseri-lo ou fazer qualquer tipo de trabalho de banco de dados. Django apenas lida magicamente com isso para nós. Agora, isso é tudo bom. E não seria adorável se tudo o que tivéssemos que fazer era atualizar nossa página. Mas se você atualizar sua página e você vê algo como nenhuma coluna, isso simplesmente significa que você precisa alterar algumas coisas em seu banco de dados. E para fazer isso, fazemos migrações. Então Python gerenciado alto, fazer migrações. E Python gerenciado dot py migram. E vamos voltar ao nosso código aqui. Não é o nosso código, mas o nosso navegador e funciona. E o nosso campo de encontro não aparece. E o nosso campo de encontro não deveria aparecer. Nosso campo de data não deveria ser editável. Automático agora o torna não editável por padrão. E isso é OK. Não queremos mexer com as datas. Não queremos ser capazes de editar as datas. Assim que criarmos uma postagem, queremos que essa data seja preenchida automaticamente. E é assim que adicionamos um novo campo a este modelo de postagem ou a qualquer modelo realmente, você adiciona um novo campo. Algo é igual a modelos pontuam algum tipo de campo. E então você faz Python gerenciado até alta fazer migrações. Python gerencia a migração de pizza.
9. Como listar todas as mensagens em sua página de casa: Tudo bem, vamos em frente e criar uma home page. Porque se voltarmos à nossa página e sairmos da administração. Acabamos de ver que o Django tem a página inicial padrão. Agora isso realmente requer um par de passos diferentes, mas para começar, vamos criar nossa visão e tipo de idéia com o Django é que muitas coisas precisam ser feitas ao mesmo tempo. E o problema de assistir um vídeo como este é que temos que fazer coisas um de cada vez, que nem sempre faça sentido. Mas nos próximos passos, vamos basicamente fazer
tudo isso em qualquer ordem específica e é o fim que é importante. Desde que tenhamos coisas como URLs, visualizações e um modelo, tudo deve funcionar para nós. Mas não podemos fazer com que tudo funcione sem os três componentes. Então o que vamos fazer aqui é abrir nosso feed e entrar em nossas visões. E eu só vou me livrar dessa renderização porque nós
não vamos usar uma visão baseada em função, vamos usar uma visão baseada em classe. E então nós vamos dizer do Django dot,
dot genérico importação ListView. E nós também queríamos, a partir de modelos DOT importar o nosso post. E porque estamos trabalhando com o post, geralmente
queremos importá-lo. Agora vamos em frente e criar uma página inicial da classe da página inicial. E este vai ser o nosso ListView. E o que isso vai fazer é simplesmente renderizar um modelo com todas as suas postagens nele. Então vamos dizer que os nomes dos métodos HTTP vai ser Get. Isso significa que as pessoas não podem postar, não podem deletar o não podem fazer nada assim. Tudo o que eles podem fazer é obter uma solicitação de página e ver as postagens. É tudo o que a página principal faz. O nome do modelo vai ser, vamos apenas chamá-lo homepage dot HTML. O modelo que queremos listar é postar. Nosso nome de objeto de contexto é geralmente eu acredito que é objeto por padrão, mas eu sempre sobrescrevo isso para ser posts. E isso é o que vamos usar em nosso modelo, que provavelmente vamos abordar no próximo vídeo Para ser honesto. E, em seguida, o site de consulta é simplesmente vai ser post.All objetos ponto tudo. E nós queremos ordenar estes posts ordem pelo Id Decresding. E vamos nos certificar de que só temos 30 postagens de cada vez. Então, uma página não é carregar um milhão de mensagens porque isso poderia levar
uma eternidade para carregar B realmente prejudicar seu banco de dados. Então isso é tudo o que vamos fazer em nossas visões mais altas. Não há mais nada aqui, como pode ver. Em seguida, precisamos criar um novo arquivo aqui em nosso campo. Vamos chamar isso de URLs dot py, URLs dot py. E aqui vamos criar uma nova série de URL. Então é do Django, URLs de pontos, caminho de
importação e de pontos de vista de importação. Ele também nos deu um nome de aplicativo e eu vou descrever isso em apenas um segundo. Porque parece que estou indo muito rápido aqui, mas isso é basicamente coisa do Django 101 até agora,
você deve estar bastante familiarizado com isso. Padrões de URL é igual a, e então ele tem um caminho, um lugar que ele vai. Pontos de vista. O que era essa visão, se nós chamá-lo e apenas homepage dot como view. O nome vai ser notado e isso não está certo. Nome é igual ao índice. Então, neste arquivo, tudo o que estamos fazendo é importar caminho para que possamos usá-lo aqui. Estamos importando todos os nossos pontos de vista. Nós realmente só temos uma visão. Poderíamos importar apenas uma visão se quiséssemos, mas vamos importar para todo o módulo de visualizações para que possamos usar view como ponto Homepage e, em seguida, renderizar esse modelo como view, que é então vai se conectar ao nosso template nome, apenas homepage dot HTML. E o nome do nosso aplicativo, que é o que vamos usar para espaçamento de nomes é feed, e isso apenas corresponde ao nome do aplicativo que estamos usando em seu nome de pasta. Também combina com este aqui. E isso apenas mantém o espaçamento de nomes ou URLs e agradável e fácil, vamos falar sobre namespaces e por que é mais importante. E quando chegamos mais ou menos para o lado do modelo das coisas, por
último, mas não menos importante, temos que abrir TIL barra URLs ponto py. E aqui podemos ver que tudo o que temos é o nosso administrador. Então, se quiséssemos, poderíamos desativar completamente o administrador simplesmente excluindo-o. E o administrador não estaria mais acessível a
nenhum usuário . Mas não é isso que queremos. O que queremos, o que
queremos é um caminho que vá para a nossa página inicial. E queremos fazer essa coisa chamada incluir. E queremos incluir como nossos URLs de feed ou algo assim. Ainda não importamos isso e queremos nos dar um namespace de feed. E novamente, vamos falar sobre namespaces e um pouco. Então, primeiro de tudo, precisamos incluir e bem, isso não é errado. Precisamos importar incluir e precisamos importar URLs de feed. Então vamos fazer a partir de Django.com dot URLs, import include. E se alguma vez te perguntaste Caleb estava na Terra, estás a receber isto? Como você memoriza tudo isso? Primeiro de tudo, não tenho muitos desses memorizados. Eu só escrevo isso o suficiente para conhecer alguns deles e ser aqueles que eu não conheço. Sinceramente, só olho para as docas do Django. Os documentos do Django me dirão tudo o que eu preciso saber. Então eu errei e movo isso para cima de uma linha. E vamos fazer a partir dos pés aplicativo importar URLs, todo
o arquivo como URLs de feed. E isso só corresponde aqui, então eu acabei de mudar o nome da importação. Vamos salvar isso e ver o que acontece. Nenhum módulo chamado Django, conf dot URL, eu acho que é suposto ser. Onde estamos? Urls? Veja, eu entendo as coisas erradas para nenhum módulo chamado Django dot URL, que arquivo ou você alimenta URLs. Nós só vamos lidar com esses URLs de ponto Fi. Django, URLs. Django vai continuar me dizendo que há um problema aqui. Este é provavelmente um que você pegou. Conjunto de consultas menos não, isso não está certo. Query set é igual a e bebida ia continuar me
dizendo que há problemas até que não há mais um problema. Então vamos em frente e voltar para a nossa página e atualizar. E devemos, se tudo está funcionando direito, ver este modelo não existe. Ele está procurando por homepage, ele está procurando por feed barra lista de postagens e está procurando por eles no Django contra off templates homepage, Django Admin templates homepage, Django Admin templates feed, feed de modelos de contrato do Django está procurando por esses arquivos e essas pastas. Ele não sabe onde realmente procurar. Então, na próxima lição, vamos em frente e dizer ao Django alterando algumas de nossas configurações, que ele deve procurar em uma pasta particular para nós.
10. Configurar seus locais de templates: Ok, na última lição, o Django foi incapaz de encontrar nossa página inicial dot HTML, provavelmente porque um, nós não criamos esse arquivo, então ele não pode encontrá-lo em nenhum lugar, o que é justo. E B, está procurando em lugares estranhos. E assim o Django nos permite configurar isso por
conta própria para que possamos configurá-lo por conta própria para que possamos fazer o que quisermos com ele. Desta forma, temos muito mais flexibilidade. Então o que eu quero fazer é abrir esse arquivo chamado Settings dot py. E onde está meu diretório base, base, base, diretório base. Então precisamos fazer algumas coisas diferentes aqui. Primeiro de tudo, queremos um diretório de projeto, então vamos fazer projeto terrível. E isso vai ser uma coisa estranha que você provavelmente não precisa se lembrar porque você não vai escrever isso muitas vezes. Podes acertar isto para o meu código fonte, se quiseres. Então nós vamos fazer o OS ponto caminho dot dy ou nome OS ponto caminho ponto ponto dire nome OS ponto caminho ponto caminho absoluto,
sublinhado, sublinhado, e, em seguida, este arquivo particular. Vamos nos certificar de que não tenho erros de digitação. Deve aparecer duas vezes. E não é porque é um nome terrível como Dire Wolf. E lá vamos nós. Agora estamos usando o sistema operacional. Precisamos ir em frente e importar isso. Então vamos importar OS no topo, que é logo abaixo de todas as minhas strings de doc aqui que vem padrão com o Django. Então isso vai funcionar para mim. Se eu apertar salvar, não deve haver reclamações no console do Django lá em baixo. E então precisamos encontrar nossos modelos, modelos, modelos, modelos e olhar para esses modelos. E então temos essa opção aqui chamada diários, esses diretórios. E o que nós queremos fazer aqui é dizer o ponto do caminho do OS juntar-se ao diretório do projeto, que vai ser exatamente onde todo esse projeto vive. Até que é esta pasta particular aqui, barra modelos. E isso vai estar procurando por uma subpasta aqui chamada Templates. Agora vamos em frente e abrir nosso navegador e vamos ver onde Django estava procurando. Agora. Jenga estava procurando por desktop Django 2-1 modelos TIL, homepage dot HTML. Vamos em frente e fazer isso existir bem rápido. Não vamos trabalhar muito com ele. Vamos fazer com que exista. Então vamos criar uma nova pasta chamada templates e o novo arquivo chamado homepage dot HTML, coisas aqui. Mas literalmente tudo o que vou escrever. Grande sucesso que está trabalhando para nós. E assim, nesta lição, conseguimos colocar nosso sistema de modelos funcionando com sucesso. Na próxima lição, vamos em frente e realmente trabalhar com o modelo um pouco mais.
11. Seu primeiro modelo: Oh, certo. Na última lição, fizemos o nosso primeiro template homepage dot HTML. Colocamos algumas coisas lá, o que é ótimo, e colocamos na pasta TIL Templates. O que poderíamos realmente fazer são visões internas. Podemos mudar onde queremos encontrar isso. Poderíamos ir feed barra homepage dot HTML. E o que isso nos permitirá fazer é mover isso para fora da nossa pasta padrão de modelos genéricos, que era necessária e será necessária no futuro. Mas vamos mudar isso de novo. Então vamos fazer um novo arquivo em nosso aplicativo de feed desta vez, vamos chamá-lo de modelos. Este vai ser um nome de diretório. Nós vamos dar a ele o namespace feed, o ponto da página HTML. Mais coisas aqui também, para, para, para, para. E vamos ver onde o Django estava procurando por esse template primeiro. Mais coisas aqui também para 2.2.2, apesar de haver realmente duas páginas iniciais. Então o que podemos fazer é ir em frente e nos livrar desta página inicial. E é aqui que a nossa página vai viver. E isso é tudo o que vamos fazer por esta lição. Nós simplesmente queria mover nosso modelo para o aplicativo de feed e, em seguida, apenas uma espécie de mantê-lo agradável e limpo para que todo o feed é um pouco auto-suficiente.
12. Seu modelo básico: Certo, neste momento temos uma página inicial e precisamos adicionar um monte de coisas a ela. E assim, em VS Code, podemos fazer HTML5 nota de dois pontos HTML cinco, pregado. E vai preencher um monte de coisas para nós. Nossa página aqui, página inicial. E quando atualizamos a página, ela diz nossa página aqui em cima e página inicial. E em nossa fonte, menos fonte de página. Podemos ver todo esse HTML. Amplie ali. Foi exatamente o que escrevemos. Agora, isso é bom. Até precisarmos de um segundo modelo que vamos precisar no final da estrada. E então neste ponto, o que queremos fazer é usar isso,
todo esse código como um modelo de aspas. E realmente só mudou as pequenas peças que precisamos, como o nosso título ou apenas o conteúdo da nossa página inicial. Então o que vamos fazer é em nossa pasta t UP TIL Templates, criar um novo arquivo chamado base dot HTML. E vamos fazer HTML dois pontos cinco, arquivo
base, e vamos chamá-lo de arquivo base aqui. Agora, novamente, isso não vai fazer nada mesmo que tenhamos o arquivo. Django não sabe o que fazer com ele. É só uma espécie de sair. Não ser usado não está sendo chamado por quaisquer outros templates ou quaisquer pontos de vista ou qualquer coisa do tipo. Em vez disso, o que podemos fazer é em nossa página inicial, poderíamos dizer estende ponto base HTML. E se atualizarmos isso diz arquivo base aqui. Isso está estendendo nossa página inicial. Então, vamos apenas excluir esta primeira página de atualização segunda. Não vemos nada aparece como fonte da página do Visualizador. Não há nada lá dentro. Desfazer isso, salvar, atualizar arquivo base aqui diz arquivo base e o título também. Foi exatamente isso que alteramos essa fonte de página do visualizador, e agora estamos usando dois arquivos de modelo ao mesmo tempo. E então o que isso está fazendo é dizer, hey, Django, pegue esse arquivo HTML ponto base que você está usando atualmente e use-o. E então eu quero que você pegue todas essas coisas lá dentro e eu quero que você se estenda a partir dele. Isso nos permite, eventualmente, injetar pequenos pedaços de código nesta página. Então, em cada página, não
precisamos escrever HTML. Lang é igual a Inglês. Não precisamos avaliar. Meta. Charset é igual a UTF-8. Nós não precisamos escrever meta nomeado viewport largura conteúdo é igual a conceber traço largura escala inicial traço é igual a 1 porque isso é doloroso para escrever em cada arquivo único. Em vez disso, podemos escrever de uma vez. Podemos escrever uma vez, e podemos estender a partir desse arquivo. E no futuro, o que vamos fazer é mostrar a vocês como podemos mudar um pouco disso que não tenhamos que escrever o mesmo lixo uma e outra vez.
13. Blocos de modelos: Muito bem, vamos ver a adição de blocos. Vamos, vamos fechar tudo isto como se estivéssemos a abrir este projecto desde o início. Vamos abrir modelos TIL baseados em HTML. E isso também é aberto a página inicial do feed templates Feed. E então nós somos páginas iniciais estendendo a partir deste ponto base HTML. E o que eu posso fazer é dividir isso também para a
base de eventos à direita e temos página inicial à esquerda. E vamos ver se consigo fazer isto um pouco menor. Espero que isso ainda seja visível para você. Espero que você não esteja em um telefone muito pequeno. Mas sim, avançando, digamos que queríamos mudar esse título. O que poderíamos fazer é adicionar essa coisa chamada bloco. E assim parece que este bloco, título e bloco. E isso é tudo o que vamos fazer. Agora vamos copiar literalmente isso. Então vamos clicar com o botão direito, copiá-lo aqui, colar. E podemos mudar o título desta página, mudou o título, título da página inicial. E podemos ver, oh, etiquetas
não fechadas, o que estamos procurando aqui? E isso é porque na verdade eu tenho um erro de digitação aqui e ali, eu preciso ter um sinal de porcentagem. E assim é assim que um bloco se parece. Na verdade, é uma boa hora. Boa razão, eu acho que para mim explicar o erro de sintaxe. Então, usamos uma chave encaracolada ou, ou uma chave de bigode, sinal de
porcentagem do bloco de palavra-chave e, em seguida, o nome dele. E isso combina bem aqui. Então fechamos isso exatamente com o oposto. Então, um sinal de porcentagem e, em seguida, a chave de fechamento, colocar nosso conteúdo no interior, todas essas coisas. E então dizemos com a mesma abertura, fechando bloco final sintaxe. E então essa tag de abertura corresponde essa tag de abertura e a tag de fechamento corresponde a essa tag de fechamento. E se você sempre quis usar o padrão, você pode dizer título padrão aqui. Agora vamos em frente e adicionar um pouco de corpo. Então, em nossa página, queremos fazer algo com esse corpo. Então podemos dizer que isso está se estendendo a partir de ponto base HTML, mas vamos também criar um bloqueio aqui, um bloco, vamos chamá-lo de corpo e fim Bloco. Certifica-te de que tenho o sinal de percentagem. E assim não cometo o mesmo erro duas vezes. Copie, cole aqui. E isto vai ser da página inicial. Isso não funcionou para mim porque eu não salvei ponto base HTML. Vamos tentar de novo. E espero que este boom esteja correto. Boom, lá vamos nós. Na verdade, funcionou. Isso está se estendendo a partir de ponto base HTML. Então isso vai ser colocado em cada página. E isto vai ser da página inicial. E foi isso que escrevi aqui. Então, se eu quiser mudar isso, posso fazer isso aqui. Agora, no futuro, se você tiver outras visualizações renderizando outros templates, em vez de escrever tudo isso,
tudo o que temos que fazer é estender da base e simplesmente injetar o título do bloco e o corpo do bloco ou quaisquer outros blocos. A coisa é que eles têm que coincidir. Você tem que ter um corpo de bloqueio. Você tem que ter um corpo de bloqueio. Você tem que ter um bloco n, você tem que ter um bloco n. E o Django irá dizer-lhe se há algum tipo de erro de sintaxe para não conseguir descobrir as coisas. Vai, vai te dizer logo na frente e ser muito honesto e direto com você. Então, pelo menos, deixará você saber o que está acontecendo.
14. Loops de templates: Tudo bem, vamos em frente e percorrer um monte de nossos posts aqui. Então, se abrirmos nosso navegador, ele só diz que isso vai ser
da página inicial e ele não está realmente looping através de qualquer um de nossos posts. Precisamos adicionar essas postagens aqui. Agora, fizemos algumas das configurações um pouco mais cedo onde tivemos nossa página inicial é um ListView. Ele vai listar todos os nossos posts e o conjunto de consultas, as coisas que queremos postar ou loop em nossa página vai ser todos os posts ponto objetos todos ordenados pelo mais recente e só mostrar 0 a 30. Então, os primeiros 30. E então nós dissemos que este nome de objeto de contexto vai ser postagens. E isso é importante. Porque se formos para nossa página inicial aqui, o que podemos fazer é em nosso corpo. E vamos nos livrar disso. Podemos dizer para postar em postagens, que é onde estamos obtendo que,
que o nome do objeto de
contexto, o nome do objeto de contexto é igual a posts. E isso aparece bem ali. E este é apenas um loop regular, assim como em Python ou JavaScript, irregular para loop. E depois dizemos “fim para”. E aqui vamos ter acesso a todos os postes. Agora, esse post vai percorrer tudo neste conjunto de consultas. Todos esses postos. E cada um desses vai ser um desses pós modelo. Então ele tem texto e tem uma data nele também. Então vamos em frente e mostrar o Post. All. E foi escrito na data do post dot. E olhe para que são primeiro post editado é o que foi chamado escrito em vez deveria ter dito em 6 de janeiro de
2021, como claramente não é o momento certo como o meu tempo de computador é diferente do meu tempo de servidor. Isso está tudo bem. Podemos definir a hora do servidor mais tarde. Isso não é grande coisa. Vamos em frente e abrir nosso administrador e vamos criar mais algumas postagens. E então vamos apenas para barra Admin. E este é o segundo post, salve e adicione outro. Este é o mais novo post, salvar e sim, é isso. Então, temos três postagens lá dentro agora. E podemos ver que ele aparece aqui. Este é o post mais recente. Este é o segundo post e o nosso primeiro post. Vamos em frente e realmente separar isso com algo como uma regra horizontal. Lá vamos nós. Então agora ele realmente mostra nossos posts. Isso é literalmente tudo o que temos que fazer neste momento porque fizemos todo o trabalho pesado em nossas visões. Nós configuramos nosso modelo para que os dados possam ser armazenados em nosso banco de dados. Em nossos pontos de vista dissemos, hey, isso vai ser um ListView. Use o modelo chamado página inicial de barra de alimentação que vai estar aqui. Então é uma espécie de auto-contido. O modelo que vamos obter a lista através é o modelo post. O nome do objeto de contexto vai ser usado ali mesmo. E o conjunto de consultas, o que queremos ser capazes de fazer loop através é isso. E isso vai fazer com que todos os nossos posts pontuem objetos, pontuem todos eles. E novamente, ele vai ordenar a identificação reversa. Se quiséssemos encomendá-los do mais antigo para o mais novo, diríamos pedido BY ID. Em vez disso, vamos dizer pedido BY ID, mais antigo para o mais novo ou nenhum. Não, essa é a maneira errada de dizer isso. O mais novo ao mais velho. Isso é melhor. E então basta cortar isso, pegar o primeiro todo o caminho até o 30º. E em nosso modelo nós simplesmente disse para cada post nesses posts, mostre-nos que o texto que vem do texto do nosso modelo. E foi escrito nesta data. E isso é tudo o que há para ele.
15. Como instalar o Django Allauth: Tudo bem, vamos em frente e adicionar, bem, alguma forma de sistema de login ao nosso site. E isso vai tomar vários passos. E se eu simplesmente abrir um Firefox novamente, há nenhuma página de login é nenhuma página de logotipo e nenhuma página de redefinição de senha. E há uma maneira muito, muito fácil de fazer isso, e é um pacote de terceiros chamado Django all off. E então o que vamos fazer é instalar isso. E agora, então dentro de nosso ambiente Pip ou PIP N para que possamos fazer pip install, Django dash, tudo desligado. Ou se quiséssemos, vamos sair dessa. Poderíamos fazer pip instalar Django dash, tudo desligado. E isso vai em frente e instalar o Django para nós. Então nós apenas damos um segundo rápido e isso vai adicioná-lo a um arquivo de bloqueio PIP para nós. E vamos em frente e voltar para dentro do nosso ambiente Pip e podemos fazer pip, show, Django tudo fora. E eu preciso digitar Pip na frente disso. E lá vamos nós. Vemos o Django todo desligado, 0 ponto 0. Agora há algumas coisas que precisamos fazer para realmente fazer isso funcionar. Tudo o que fizemos foi dizer, hey, neste ambiente virtual, o Django oth existe. O que precisamos fazer também é entrar em nossas Configurações dot pi, e onde estão nossos aplicativos instalados em aplicativos R instalados, precisamos adicionar algumas coisas aqui. Então, para que o Django funcione, antes de tudo, precisamos de sites contrib habilitados. Então, sites contrib do Django, e isso só permite que o Django seja multi-site. Então queremos instalar tudo fora e realmente não importa. Eu costumo colocar todos os meus pacotes de terceiros e meus pacotes locais ou módulos como feed abaixo do material do Django. Portanto, queremos colocar todas as vezes lá. Também queremos adicionar todas as contas auth dot. E apenas para uma boa medida, porque tudo desligado também suporta login com Facebook, GitHub, Twitter, et cetera, et cetera. Vamos fazer todas as contas sociais de auth dot. E então, em algum lugar perto do fundo, vamos em frente e adicionar um monte de todas as nossas configurações. Primeiro, há muita coisa aqui. Precisamos de um ID de site, e temos apenas um site, então vamos usar o ID de site um por padrão. Em seguida, haverá um URL de login. E nós só queremos definir isso para ser login de barra porque isso é bastante padrão. Então haverá um login, redirecionamento URL, e isso é quando você entrar, onde está? Suponha que eu te leve, nós realmente só temos uma visão agora, essa é a nossa página inicial. Então, vamos voltar para a nossa página inicial. Depois, há autenticação de conta. Se eu puder soletrar qualquer um desse direito, método de
autenticação é igual a. E como queremos que as pessoas autentiquem suas contas? Queremos dizer, mande uma conta de e-mail, confirme. E-mail no get é igual a true. E o que isso faz é quando você clica nesse link em seu e-mail. Ele confirma automaticamente ou eles precisam pressionar um botão em seu em seus sites para confirmar? Nós vamos dizer que eles não precisam pressionar um botão apenas em um pedido GET é bom o suficiente. Eu conto que o e-mail necessário é igual a true. Porque queremos que todos tenham uma conta de e-mail, porque estamos criando um serviço no qual você deseja poder enviar e-mails para pessoas ou, pelo menos, entrar em contato com as pessoas. Vamos fazer a verificação de e-mail da conta é igual a dois, opcional. Eles têm que verificar seu e-mail? E então isso pode ser opcional ou isso pode ser obrigatório. Vou tornar isto opcional, por enquanto. sessão da conta. E-mail. Confirmação é igual a true. Vamos apenas passar por algumas dessas contas logout on.get. Isso significa que alguém tem que preencher um formulário como em seu HTML? Vai ser embrulhado em um formulário para sair? Tecnicamente, isto deve ser falso. Essa seria a maneira correta de logótipo, mas nós vamos fazer a, a maneira de trapacear. E nós vamos dizer, sim, eles podem simplesmente clicar em um link e funciona. Login da conta. E a redefinição de senha é igual a true. E há mais alguns. Mas antes de passarmos por tudo isso, vamos em frente e digitar Django todo ortodoxo na máquina do Google onisciente. E há todos os tipos de configurações aqui para que possamos passar para a nossa configuração. E isso é praticamente o que estou configurando agora é apenas um monte desses. Não todos eles, mas um monte deles. E então, a qualquer momento, se você quiser oh, eu não me lembro o que Caleb linha dedicar redirecionamentos autenticados de login. Você poderia ir direto para os documentos e ele vai dizer exatamente o que ele deve fazer e quais são as opções. É verdade ou falso? É opcional? É obrigatório, et cetera, et cetera? Logout da conta, o redirecionamento é igual a. Vamos voltar para a página inicial. Então, quando você sair, para onde ele vai redirecionar o usuário? Eu gosto deste. Reserva da conta. Nome de usuário. Carcaça é igual a false. E assim o nome de usuário, como o bastão, deve ser o mesmo que Cain, todos em maiúsculas. E isso é o que estamos dizendo aqui, que esses não são dois nomes de usuário diferentes. Sessão da conta, lembre-se é igual a true. E o que isso faz é se você definir isso como falso, o formulário de login automaticamente vai ter um botão e então ele diz, lembre-se de mim por duas semanas ou o que quer que seja. Nós realmente não queremos isso. Estamos usando para dizer, lembre-se para sempre, inscrição na conta, senha. Digite duas vezes igual a true. Queremos que as pessoas digitam sua senha duas vezes apenas para que não se bloqueiem
acidentalmente de sua conta porque isso é inconveniente. E francamente, o usuário vai culpar seu site por isso, mesmo que tenha escrito errado. Nome de usuário da conta mínimo comprimento vai ser, digamos que o nome de usuário mais curto tem que ser dois caracteres. E por último, e talvez o mais importante, back-ends de
autenticação serão, e nós vamos escrever uma tupla ou uma tupla aqui. E nós vamos adicionar dois. E seus backends do Django dot contrib dot auth dot, ponto backend modal. E isso foi tudo em maiúsculas. Isso deveria ter sido tudo minúsculo. Lá vamos nós. E o segundo é tudo ponto de conta auth dot. Infra-estrutura de autenticação. Em seguida, o back-end cation. Vamos em frente e salvar isso. E diz que temos 700 migrações aplicadas. Então vamos em frente e vamos fazer Python gerenciado alto, migrar, legal, que aplicou todos eles. Agora, por último, mas não menos importante, mesmo que tudo isso esteja configurado corretamente, vamos passar para nossos URLs em nosso aplicativo TIL. Então, nossa TIL onde as configurações vivem. Em vez de ir para configurações, vamos para URLs. E nós vamos adicionar um novo aqui. E queremos simplesmente adicionar URL. Em branco. Incluir todas as URLs de ponto de autenticação. E isso, isso ainda não foi importado, então vamos em frente e importar isso. E isso vem do Django Con menos ells, onde Include vem da URL. E vamos salvar isso e ver e há algum tipo de problema lá. Sim. É por isso que normalmente fazemos vírgulas. Cuco, cuco, legal. Ok, então isso está tudo em operação. Quando voltarmos à nossa página aqui, não veremos nada acontecer. Mas o que podemos fazer agora é ir para cortar login. E isso realmente não vai fazer nada também porque eu
já estou logado como administrador. Vamos fazer uma nova janela privada. E vamos cortar login. E agora temos uma página de login e podemos simplesmente digitar o endereço de e-mail, digitar a senha. Então eu vou inserir o meu endereço de e-mail. Caleb disse Caleb dot IO e minha senha. E eu vou clicar em “Entrar”. E agora estou logado. E se eu quisesse, eu poderia ir para cortar log out e ele me desliga. Agora, neste momento, nós realmente não temos idéia se estamos logados ou desconectados. Isso é totalmente bom. Tudo o que precisávamos fazer era configurar o login e o logout do usuário. E se quisermos, podemos simplesmente ir para cortar a inscrição. E agora as pessoas podem se inscrever com seu endereço de e-mail. Eles podem colocar um nome de usuário e digitar sua senha duas vezes e se inscrever automaticamente. Tão perto, por enquanto. E isso é realmente tudo o que há para esta lição em particular.
16. Links globais de login e logout global: Vamos em frente e adicionar um link global de logout e login. Então vai ser global. Então queremos que seja em nossos modelos TIL base dot HTML. Este é o nosso arquivo global. E então o que podemos dizer aqui é que podemos
verificar se alguém está autenticado ou não autenticado, como em, eles estão logados ou não? E podemos simplesmente fazer isso com se request dot user_data é autenticado. E podemos dizer outra coisa. E vamos fazer isso. Você está logado. Eu realmente não me importo que haja um erro de digitação lá. Você está desconectado e vamos ver o que isso faz. Então diz que estou logado. Se eu abrir isso em uma nova janela privada, ele diz que estou desconectado. Diz isso ali. Se eu for cortar login e entrar com meu nome de usuário e senha. E agora diz que estou logado. Então agora temos autenticação, estamos logados, estamos desconectados, Cuco, cuco, legal. Agora precisamos adicionar esses links. Então tudo o que precisamos fazer é dizer, em vez de dizer que você está logado porque isso não ajuda, alguém vai saber se está conectado ou não. Podemos adicionar um link. Um HREF é igual a dois. Ele vai para algum lugar, faça logout porque o usuário já está logado. Eles querem sair do link. Se eles estiverem desconectados, eles querem um link de Login. Então, um HREF é igual a algum link. Ainda não sabemos. Login. E vamos fazer isso feio porque vai nos deixar mais bonitos daqui a pouco. Vamos acrescentar que o RH lá dentro, aquela regra horizontal. Ok, então agora eu estou logado porque ele está me mostrando o link de logout. Vamos em frente e adicionar esse link, porque atualmente isso não vai a lugar nenhum. Nós fazemos isto. Nós dizemos URL, bloqueio de conta, e isso está vindo do Django tudo desligado. E podemos fazer a mesma coisa aqui com login na conta, URL, login na conta. E agora parece que não fez nada, mas se eu clicar em logout, ele me registra identificar clique login. Vai pedir-me para iniciar sessão e voltar a iniciar sessão. E posso voltar a sair. Então agora temos um sistema de logout de login e nosso modelo realmente permite que o usuário faça login e logout sempre que quiser.
17. Como estender modelos para Allauth: Tudo bem, vamos dar uma olhada em estender todos os modelos de autenticação. Como em quando estamos aqui, vamos para, vamos voltar para a página de login. Olha, temos mensagens e podemos discar se quisermos. De qualquer forma, digamos que não queremos que este menu apareça e só queremos a placa e apareça. Como, como vamos fazer isso? Bem, primeiro de tudo, vamos fazer este django tudo fora do GitHub. E podemos entrar em modelos fora. Eu conto. E nós temos todos esses links diferentes aqui não são links, mas arquivos. Então, vamos pegar o login. E isso vem de, lembre-se que isso é importante, caminho é importante. Então ele vem de conta barra login. Então vamos dizer que queremos sobrescrever isso. Vamos para modelos TIL. Vamos criar uma nova pasta chamada conta e um novo arquivo chamado login dot HTML. E vamos apenas dizer que isto está sobrescrito. Vamos voltar à nossa página de início de sessão e diz que foi sobrescrita. E então o que podemos fazer agora é copiar todo esse código. Vamos descer aqui e copiar todo esse código. Jogue isso de volta aqui. Certifique-se de que estamos realmente estendendo corretamente. E basicamente colocamos de volta. E se quiséssemos, poderíamos fazer isso com todos os arquivos. Esse jangle off nos dá. E às vezes há um caso para isso e às vezes não há. Agora, isso pode ser um pouco doloroso porque há muitos modelos aqui,
como mudança de senha, redefinição de senha, redefinição de senha feita redefinição de senha de chave, redefinição de
senha de chave feita conjunto de senhas, você sabe,
sobre e sobre e sobre. E podemos fazer isso uma e outra e outra vez. Vai levar algumas horas e vai ser meio doloroso e há uma maneira melhor de viver sua vida. E assim temos um ponto base HTML aqui em nossa conta templates. Acho que não sabemos o que sabemos. Está bem ali. Perfeito. Há uma maneira melhor de viver a vida. Está bem, olha para isto. Então, em nossa pasta de contas de auth do Django, há um arquivo chamado base dot HTML. E isso está entrando em algum templamento chique aqui. Mas o que podemos fazer é basicamente sobrevalorizar todos eles de uma vez. Em vez de fazer um de cada vez em que poderíamos sobrescrever um monte deles. Ele ainda vai ter o conteúdo, mas ele vai ser capaz de estender a partir do nosso ponto base HTML, que vai ser muito, muito importante. E você pode ver que se Doo-doo-doo-doo conta baseada em HTML, se vamos abrir nosso ponto base HTML e ver isso. Este é o nosso arquivo HTML ponto base. E vamos alterá-lo de, em vez de estender a partir de uma conta base barra ponto base HTML, vamos apenas estender a partir do nosso ponto base HTML. E vamos ver como isso se parece. Este é o nosso login HTML ponto base que funcionou, que funcionou para nós. Agora, o problema aqui é que ele está usando conteúdo de bloco. E eu disse, vamos chamar esse corpo de bloco. Agora podemos mudar isso para conteúdo e depois
mudá-lo em nossa página inicial, se quisermos. Ou podemos ter 21 ou podemos aninhar se quisermos. Então vamos em frente e simplesmente aninhar isso. Porque essa provavelmente vai ser a maneira mais fácil. Bloquear, conteúdo e bloquear. E olha para isso. Temos todas as coisas de entrada. Agora o que é bom sobre isso em particular é que se voltarmos para o nosso login, que está se estendendo do ponto base HTML, nós não temos o título de cabeça de bloco. Não temos, o que mais temos aqui? Consiga provedores. Então, como conteúdo de bloqueio, podemos fechar isso? Não podemos fechar esse. Recuo é estranho nisso. Sim. Ok. Então eu acho que nós vamos ficar com esse exemplo. Não há título de cabeça. E, de fato, você pode ver aqui o título padrão existe. Está caindo para trás porque não há nenhum título de cabeça definido. Em nosso ponto base HTML. Nós só temos o título, nós chamamos o título, eles o chamaram de título principal. Então o que podemos fazer em vez de fazer tudo isso, é que podemos voltar e simplesmente sobrevalorizar o arquivo base deles. Então vamos para a conta e vamos pegar o arquivo base deles. E vamos encaminhá-lo para o nosso arquivo base. E assim poderíamos levar tudo isso se quiséssemos. Vamos pegar a versão bruta disso. E vamos criar um novo arquivo chamado base dot HTML. E ok, então isso é muito parecido com nosso ponto base H2O e isso na verdade não é bom. O que queremos fazer é nos livrar das coisas extras para
não precisarmos de cabeça extra, título extra. Não precisamos de nada disso. Vamos descer aqui, vamos nos livrar do corpo extra. Não precisamos disso. Eles realmente têm um bloqueio e você é chamado de corpo, olhe para isso. E então o que podemos fazer é bloquear o corpo. Se houver mensagens, você vai mensagens menu. Queremos mostrar o cardápio? Não, não vamos mostrar esse menu. Vamos nos livrar disso. E vamos talvez fazer isso um pouco mais bonito porque esse recuo é estranhamente ruim para
tal, uma biblioteca tão popular ou um pacote
tão popular que recuar é simplesmente incrivelmente terrível. Certo, vamos nos livrar dessas coisas. E então estamos apenas substituindo seu arquivo HTML ponto base. E o que queremos dizer agora é estender ou estender nosso arquivo HTML ponto base. Não a conta barra base ponto HTML, mas a nossa base. Ele vai olhar para a nossa base primeiro, e então ele vai olhar para a conta barra base ponto HTML arquivo. Vamos salvar isso e ver o que acontece. Login é realmente um mau exemplo porque nós substituímos isso. Vamos esquecer a senha e bloquear. Mantém o nosso ponto base HTML material aqui. Digamos que queremos nos inscrever. Ele mantém nosso material HTML ponto base lá também. Então vamos fazer afazeres, afazeres. Vamos nos livrar disso porque não precisamos mais disso. E vamos talvez adicionar um link de volta à página inicial em cada página. E então vamos apenas adicionar um pequeno link rápido. Um HREF é igual a barra, essa é apenas a nossa página inicial. Vou chamar isto de casa. E não precisamos usar uma URL aqui só porque a página inicial já está, a página inicial será a mesma se usarmos uma barra ou se usamos uma URL do Django. Então nós temos casa, nós temos login e vamos em frente e abandonar este login um. Vamos entrar. Excluir, mover para o lixo. E parece exatamente o mesmo. Isso é perfeito. Isso é o que queremos. Queremos que isto funcione assim. E assim, neste momento, temos agora estendido todos os modelos de autenticação. E novamente, há realmente duas maneiras de fazer isso. Se eu voltar aqui, podemos fazer um por um. E em alguns casos você pode precisar, você pode ter que sobrescrever um inteiro. Só porque razões, sua razão pode ser diferente das minhas razões. Então não posso dizer uma razão exata, mas é possível fazer isso. Ou você pode dizer apenas sobrescrever todos eles
por, substituindo seu arquivo base. Então eu só peguei o arquivo base deles se houver mensagens, mostrar algumas mensagens aqui e estender da nossa base. Então, o que esta cadeia de comando
parece agora é login vai para a conta barra base, que é Django off account barra base dot HTML. E em vez de mostrar todas essas coisas, nós dissemos, apenas mostrar o que queremos mostrar e estender a partir do nosso ponto base HTML, que então vai injetar tudo aqui. E assim, agora temos a capacidade de temar nossa página. De qualquer maneira que quisermos.
18. Adição de Tailwind CS.: Tudo bem, vamos em frente e adicionar um pouco de vento de cauda para que o nosso lado pareça um pouco mais agradável. E nós vamos realmente roubar, algum componente não vai roubar, mas vamos usar alguns componentes que
algumas outras pessoas têm agradecidamente open-source. Então primeiro as coisas que precisamos ir para o nosso ponto base HTML. E aqui precisamos adicionar algum tipo de CSS. E para fazer isso, vamos abrir uma nova guia e ir para tailwind CSS. Cara, vamos começar e instalar. Existe uma CDN? E aqui nós não queremos fazer todo o material de front-end, nós só queremos o CDN. E isso não é maneira de viver sua vida em produção, a propósito, porque o tailwind é um arquivo CSS
muito, muito grande. Mas enquanto você está fazendo algum trabalho local, tudo bem. Agora vamos em frente e ver como é a nossa página agora. Ok, isso fez um monte de redefinir. Muita, muita redefinição. Então isso não é uma coisa ruim. Agora podemos adicionar tudo o que quisermos a ele. Então vamos em frente e adicionar algum tipo de navegação. Agora eu sei com um fato que eu quero essa navegação em particular e tudo eu fiz foi definir isso para digitar em componentes de vento traseiro do Google. E eu encontrei uma navegação que eu realmente gosto. E esta é a nossa navegação aqui. E o que quero fazer aqui é mostrar o código. Este é todo o código. Vamos copiar tudo isso. E vamos fazer isso. Vamos empurrar tudo para o fundo por enquanto e colocar isso em cima. E o que mais temos aqui? Temos mais alguma coisa? Então temos CSS que vem com ele. Vamos colocar isso na nossa cabeça onde deveria estar. E vamos apenas dizer que o componente é deste link específico para que eles estão recebendo crédito por isso. E vamos ver como isso se parece. Ok, nada mal, nada mau. Não queremos tudo isso. E nós queremos algum tipo de área de conteúdo aqui também. Então vamos começar a olhar através de alguns deste logotipo. Permite alterar esse logotipo de logotipo para TI. L significa hoje eu aprendi painel. Este link pode ir direto para a casa. O que mais precisamos? Precisamos de links de logout de login. Então vamos nos livrar de todos esses entre a casa e o logotipo. Logotipo, logotipo, logotipo. E tudo o que fiz foi apagar um monte de coisas lá. Então agora temos logout login ou não login, mas home analógico out. Vamos adicionar login porque não sabemos se estamos logados no momento ou não. É assim que as pessoas dizem que o C um link de
logout e se virem o comprimento do logotipo para ir, eu faço login. E se eles virem um comprimento de login, eles vão para cima, desligados. Ok, então podemos fazer isso muito facilmente sem o link de logout. O que podemos fazer é, se solicitação, que o usuário é autenticado. E, em caso afirmativo, se o usuário estiver autenticado, mostre um link de logotipo. E onde é que essa linguagem do logotipo? Nós escrevemos isso em um par de menos. Escrevemos essas aulas atrás. Sair. Vamos só ir em frente e roubar isso. Coloque-o bem ali. Então podemos dizer se o usuário não está logado,
caso contrário, eles estão desconectados. Poderíamos pegar tudo isso, copiar e colar. E em vez de sair da conta,
queremos fazer login, e queremos que isso diga login. Login. E isso vai para a nossa página de login. Parece que não fizemos nada só porque ainda não temos uma área de conteúdo aqui. Vamos também alterar esse ícone. Porque quando fazemos login e logout atualmente os ícones ou exatamente o mesmo. Então, temos um ícone aqui em algum lugar? Sim. Eu classe Bx, Bx sair. Vamos fazer login. Lá vamos nós. Se eles trocaram e virem isso de novo, desfaça. E vou refrescar-me aqui do lado esquerdo. Lá vamos nós. Isso funcionou muito bem. Você sempre pode apenas Google, bem, ícones de caixa. Vamos fazer isto. Ícones de caixa, CSS, ícones de caixa. E assim poderíamos usar qualquer ícone que quiséssemos aqui. Isso é muito legal porque bons ícones também, eu gosto destes, pode usá-los em um projeto futuro do meu. Certo, então está tudo bem. Precisamos agora de uma área de conteúdo. E então, neste ponto, talvez
queiramos fechar algumas coisas aqui. Então temos carvão flexível com 56, blá,
blá , blá. Vamos tentar isto. Div. Minhas coisas aqui. O terceiro é, vamos adicionar um pouco de estofamento. S, p, traço 16. Ary é que parece um pouco melhor e então podemos jogar todo o nosso conteúdo lá. Então vamos rolar de volta para baixo. Vamos nos livrar das coisas que não usamos mais. Estamos usando os links de logout de login. Não precisamos mais disso. Não precisamos mais do RH. Precisamos do corpo e do conteúdo lá dentro. E podemos mover isso para cima. Lá vamos nós. Então isso não parece muito bom. Honestamente. Eu não vou mostrar exatamente como estilizá-lo, só porque isso é um curso completo de front-end por conta própria. Mas o que você pode fazer é sempre inspecionar e dizer,
hey, eu preciso estilizar esses oito de forma diferente. E você pode usar tailwind H 1s, ou você pode substituir o modelo e adicionar classes a ele, se você quiser. Então vamos em frente e fazer login. E agora eu estou logado e agora eu posso sair e sair se eu quiser fazer. E então nós simplesmente adicionamos vento de cauda com um pouco de navegação agradável à esquerda. Não se esqueça em qualquer momento, você sempre pode verificar o código-fonte que eu estava fazendo commits ao longo do caminho. Então você pode ver apenas o código que eu mudei em cada lição individual.
19. Postagens de estilo ao estilo à moda: Tudo bem, vamos em frente e fazer nossas postagens parecerem agradáveis usando tailwind CSS. Agora eu já encontrei um componente específico que eu realmente quero usar. E então o que eu vou fazer é apenas no meu outro monitor aqui, eu vou copiar este link e ir para baixo e colar. E é assim que eu quero que um post se pareça. Agora, o problema é que não vamos ter todos os detalhes imediatamente. Nós vamos ter que ir e adicionar isso em apenas um pouquinho. Não sabemos quem escreveu o quê, não
sabemos se há um link detalhado. Não temos categorias, também não
temos títulos. É literalmente apenas texto. Então, como nós, como adicionamos isso? Vamos em frente e copie todo esse código. E você pode ver o código aqui. Simplesmente copiei tudo. E o que eu posso fazer é entrar no meu feed e onde cada post
está sendo postado ou onde ele está sendo exibido? Está sendo exibido em nossa página inicial. Então vamos em frente e abrir espaço para trabalharmos aqui e colar isso ali. E digamos que este componente é desse link. Agora, isso vai mudar essas três postagens feias para ficarem iguais, mas nós podemos modificá-las. E isso não parece muito ruim, não é? Eu gosto muito disso. Então o que podemos fazer antes de tudo é aquela data, vamos mudar essa data. Sabemos que cada post tem um item de data ou um atributo de data, propriedade Date. Certo, isso funciona um pouco melhor. Digamos que não queríamos que dissesse o encontro completo. Podemos fazer um encontro de cachimbo. E vamos fazer f, j, y, g, a. E eu vou te mostrar onde consegui isso em um segundo. Então, onde eu consegui esse estranho f, j, y j é da data do PHP.NET. E vamos para o manual de datas. E posso estar na página errada, mas encontrei um exemplo que funciona mesmo assim. Então aqui está o que usei. E isso é realmente um que eu costumo usar em muitos dos meus projetos mentes muito semelhantes. Você pode usar m, d, y, e ele mostra você como mês, dia, ano, você pode, ele vai mostrar-lhe exemplos do que todos estes podem fazer. Então é apenas o manual de data do PHP. Quanto aos formatos de data. Vamos ver o que isso faz. Sim, não, não exatamente. O primeiro exemplo foi melhor. Vamos fingir que não te mostrei essa. Tudo bem, não temos um título. Então vamos em frente e nos livrar desse título. Onde você está e nós também não temos categorias. Vou comentar essa categoria. Então não diz mais design lá dentro. Nós não temos um título lá também, então vamos em frente e cortar esse título. E o nosso post é suposto parecer algo como este texto post ponto. E isso realmente fez seus posts muito menores do que o previsto. Então o que podemos fazer aqui é ver. E a coisa toda, vamos dar uma largura a isto. Nós podemos fazer isso em tailwind também, mas este módulo em particular, Django to1, não
é um curso de vento de cauda, tem, então estamos focando mais
no lado Django das coisas do que no lado do vento de cauda das coisas. Mas ainda precisamos de coisas para olhar, e ainda precisamos de coisas que pareçam bonitas. Vamos continuar e salvar isso, e isso parece um pouco melhor. Vamos adicionar algumas coisas a fazer aqui. O Leia mais. Ainda não sabemos onde é suposto isso ir. Então, antes de
terminarmos este módulo, vamos procurar basicamente todo o nosso código-fonte para um fazer, para fazer adicionar um URL detalhado. E o que mais precisamos aqui? Precisamos que esse usuário seja diferente. E então vamos adicionar outra coisa a fazer aqui. Para fazer, o usuário precisa de um link para sua biografia e uma foto, miniatura e nome. Então é um pouco. Então, em vez de dizer, ei, sim, nós vamos fazer tudo isso na próxima lição, porque a próxima lição provavelmente poderia ter 304050 minutos de duração. Eu realmente não sei. Em vez disso, vamos criar um pouco de afazeres, que é apenas dizer, “Ei, nós do futuro”. Sempre que vemos isso, apenas saiba que precisamos dar uma olhada para isso fazer ou precisamos encontrá-lo para fazer. E precisamos ler o que está nos dizendo para fazer. Então é uma maneira de manter o controle do seu código. Agora, se o seu afazeres não se destacar como o meu, tudo bem. Estou usando uma extensão chamada “Todo Tree “, chamada “Sim, é chamado “Todo Tree é por grunhido, feio”. Então, por enquanto, honestamente, isso está funcionando. Isto não está a funcionar tão bem como queremos que funcione. Tudo o que queríamos fazer era adicionar um bom componente aqui.
20. Como adicionar um aplicativo de perfil: Ok, vamos em frente e adicionar perfis, porque agora não temos perfis de usuário. E essa é uma das coisas que precisávamos adicionar na última lição. Simplesmente não os temos. Vamos em frente e criá-los. E assim tudo o que temos a fazer aqui é fazer você Python gerenciado aplicativo de início alto, e vamos chamar isso de perfis. E vemos uma nova pasta aqui. Vamos entrar em nossas Configurações e ativar isso. Então, entramos em nossos aplicativos instalados. Vou chamá-lo de perfis porque é assim que se chama “Perfis”. E então em nosso modelo.predict, podemos criar um novo modelo de perfil. Então vamos fazer perfil de classe, e isso vai ser um perfil de usuário. É preciso modelos, dot Model como é herdado. Herança. Usuário vai ser algum tipo de link de volta para o objeto de usuário regular. Agora, se isso foi um pouco confuso, vamos fechar algumas dessas coisas. Primeiro, temos usuários. E com esses usuários, talvez queiramos usar o nome e sobrenome, mas você não vê um lugar para carregar uma imagem aqui. E então precisamos estender isso. E então uma maneira de fazer isso no Django, e geralmente há algumas maneiras de fazer as coisas em qualquer framework. Mas uma maneira é simplesmente criar outro modelo, como o chamado perfil e vincular o usuário original a este perfil. E então é isso que vamos acabar fazendo. E então dizemos que o usuário é igual a dois modelos, um a um campo. E isso vai levar um usuário do Django que será importado em apenas um segundo. Na exclusão é igual a cascatas de pontos de módulo. Então, quando excluirmos esse usuário, também exclua esse perfil. E isso nos dá um nome relacionado do perfil. Na verdade, isso ainda não nos deu um nome relacionado. Então o que vou fazer é comentar isso. E precisamos, de, precisamos importar esse usuário. Então vamos fazer do Django dot contribute, dot, auth, dot models. Não consigo me lembrar desta. Importar usuário. Vamos ver se o Django se queixa disso. Que nenhuma queixa, bom, bom, bom. Vamos em frente e fazer migrações. Criou um perfil para nós migrar. E vamos registrar isso em nosso administrador. Então vamos dar uma olhada no que já fizemos. Fizemos isso com o feed sysadmin. Então vamos apenas copiar tudo isso, fechar isso e entrar em perfis admin. E isto é lido através de uma linha de cada vez. Precisamos do módulo de administração dos modelos. O que temos aqui modelos? Não há modelos postais aqui. Não é chamado de post, é chamado de perfil. E então, em vez de post admin, vamos chamá-lo de perfil e perfil admin. E vamos refrescar-nos aqui e vamos ver esperar por isso. Perfis. Agora não há perfil ainda. Então o que podemos fazer é anexar manualmente um pátio de perfil. Então vamos criar um novo perfil aqui. E esse usuário vai ser Caleb, e esse usuário vai se conectar a esse usuário em particular. E assim sempre haverá uma relação um-para-um aqui. Então toda vez que há um usuário, deve haver um perfil. Toda vez que há um perfil, deve haver um usuário. Eu olharia para esse objeto de perfil e não tem um nome apropriado. Vamos em frente e adicionar esse nome apropriado. Ainda bem que apareceu. Surdo, sublinhado, sublinhado, string, sublinhado, sublinhado. Auto, retorno, auto usuário ponto. Não use nome de usuário. E espere que isso carregue. E lá vamos nós. Então, na verdade, não há nenhum ponto em ter isso neste momento. Mas vamos estender o usuário adicionando um perfil, que pode então ter uma miniatura ou algum tipo de imagem. Vamos reativar esse perfil de nome relacionado. E vamos ver se isso faz com que outra migração nunca
prejudique para verificar se você precisa fazer uma nova migração. Então vamos em frente e migrar isso. E estamos prontos para ir. Agora, uma última coisa que queremos fazer aqui é adicionar essa coisa chamada sinal. E então a ideia aqui é, toda vez que criamos um novo usuário, também criamos um novo perfil automaticamente. E o que um sinal faz, é muito parecido com um gancho web ou um gancho no React. Ou se você vem da linha de JavaScript, é muito parecido com uma chamada de volta. Então, quando um usuário é criado, podemos tomar uma ação específica. E isso é chamado de sinal no Django. Então vamos fazer def, criar perfil de usuário. Vamos pedir o remetente ou não perguntar, mas recebeu um sim, o remetente, a instância criada e args de palavra-chave. E se você alguma vez se perguntando mais sobre sinais, porque este curso não vai ir muito fundo em sinais. O médico do Django, um ótimo lugar para começar. E então vamos adicionar uma docstring e aqui, Criar um novo objeto de perfil. Objeto. Quando um usuário do Django é criado. Simples é que vamos em frente e dizer se criado é verdade. Perfil de objetos de ponto, ponto criar usuário, isso é aqui em cima. Portanto, o usuário do ponto de perfil é igual à nova instância do usuário. E para que isso funcione, precisamos registrar isso como um receptor para receber esse sinal. Publicar salvar, e esse remetente será usuário. Então o que estamos dizendo aqui é que há um sinal lá fora em algum lugar. E pense nisso como um sinal no espaço. E temos uma antena parabólica gigante e estamos tentando receber sinais. Então estamos procurando por um tipo específico de sinal. Estamos à procura de um post save. Então, uma vez que o usuário é salvo ou uma vez que um objeto é salvo, em vez disso, estamos dizendo verificar para ver que tipo de dados está chegando. Então, se esses dados são um usuário e eles foram apenas salvos, execute isso. E então precisamos agora Doo-doo-doo-doo, importar receptor e salvar post. Não precisamos importar usuário porque já temos usuário. Então, precisamos importar receptor e salvar ou salvar postar salvar em vez. Então, do Django dot db, modelos de
ponto, sinais de ponto, importação, post ,
salvar, não, post save. Lá vamos nós. E do Django, estou realmente esticando minha memória aqui. Do Django dot desppatch, importar receptor. Django não reclamou. Legal. Então agora podemos ir em frente e criar um novo usuário. E idealmente criaria um novo perfil também. Então vamos voltar para o nosso administrador. Vamos criar um novo usuário. Teste. Coloque uma senha aí. E vamos apenas dizer se vamos entrar em perfis. Lá está ele. Ele criou automaticamente para nós. Assim, ele cria automaticamente um perfil cada vez que criamos um novo usuário. E isso só mantém essa relação um-para-um existe. Então, como uma breve recapitulação, o que fizemos foi dizer, hey, cada usuário precisa ter um perfil anexado a ele. Ainda não adicionamos nada em particular, exceto
aquele a um campo que realmente conecta esse usuário a esse perfil. Então dissemos que cada perfil deve ser chamado self.users dot username, qualquer que seja esse nome de usuário. Então ele está dizendo self dot user, vá até aquele usuário, aquele usuário Django. Sabemos que cada usuário do Django tem nome de usuário e usá-lo como uma representação para seu nome, seu nome de objeto. Então dissemos, toda vez que um usuário é salvo, execute esta função, crie perfil de usuário. Vai aceitar o remetente. Nosso remetente aqui. Nossa instância vai ser a instância do usuário. Então, se eu criar um novo usuário chamado test, ele vai enviar isso para testar o usuário como, por exemplo, verificar para ver se esse objeto foi criado. E então um monte de argumentos de palavra-chave que não precisamos nos preocupar. Se um novo usuário foi criado após salvar a postagem. Em seguida, podemos dizer perfil ponto object.Create usuário é igual a essa instância. E isso apenas cria um novo perfil para nós toda vez que um novo usuário é gerado. E aprendemos sobre receptores e sinais e como um sinal é como uma radiofreqüência no espaço, e como um receptor é como sua antena parabólica.
21. Adição de um pacote de miniaturas: Tudo bem, vamos em frente e instalar uma biblioteca de miniaturas. Então vamos fechar isso da nossa última lição e precisamos fazer algumas coisas para instalar isso. Então, primeiro de tudo, precisamos encontrar uma biblioteca para trabalhar. Então o que eu vou fazer é apenas abrir meu navegador e digitar o pacote de miniaturas do Django. E nós podemos ir ao Django Packages.org e olhar através de um monte deles. Há miniaturas do Django, Jim, Django, Criador de miniaturas. Vamos usar a miniatura do Sorrell porque estou familiarizado com esta. Eu usei no Django 101. Se você tomou Django um-para-um, você o usou também. Então sabemos que funciona. E precisamos ir para a instalação, pegar o código. Isto é o que fazemos pip instalar miniatura solo ou porque estamos usando Pip env, Podemos fazê-lo de uma maneira ligeiramente diferente. Podemos sair do nosso Pip env e podemos fazer pip instalar Sorrell miniatura. E nós apenas damos um segundo rápido para fazer a sua coisa. Isso já está feito. Então podemos fazer Pip env, shell. E faça o Pip. Pip mostra miniatura de tristeza. E aí está ele. Agora, se você não estiver usando preventivo, você sempre pode apenas fazer pip instalar Sorrell, miniatura. Você pode realmente fazer isso dentro de um env Pip também. Ele simplesmente não irá adicioná-lo ao seu arquivo Pip ou ao seu bloqueio de ponto de arquivo Pip. Agora, como instalamos essa coisa? Adicionamos miniatura de ponto Sorrell, não apenas tristeza, o que normalmente fazemos com o pacote Django. Só o nome do pacote. Vamos fazer o nome do pacote e, em seguida, uma pasta lá dentro. E é assim que vamos permitir isso. Então vamos voltar para VS Code, e vamos abrir um settings.js. E em algum lugar aqui, jogue em miniatura de ponto do solo. E devemos ver que o Django reinicia. Temos uma migração desempregada. Vamos em frente e executar a migração. Python gerenciado até alta migração. E isso apenas aplicou miniatura 0-0, 0-1 inicial, e isso é da miniatura de ponto Sorrell. Agora, como nós realmente usamos esse uso de modelo? Isto é o que queremos. Queremos de ponto solo, miniatura importar campo de imagem
e, em seguida, usar imagem é igual ao campo de imagem e em seguida, fazer upload para onde quer que ele para carregar para. E isso vai estar dentro da nossa pasta de mídia. Assim poderia criar uma subpasta. E dentro da nossa pasta de mídia chamada seja lá o que for. Acho que vamos pular isso e vamos usar essa parte aqui. Então vamos em frente e abrir nossos modelos de perfis. E queremos acrescentar isto aqui. E então podemos escrever isso bem ali. A imagem é igual ao campo de imagem que vem de Sorrell ponto, miniatura e upload para onde quer que seja. Vamos chamar isso de perfis. Eu disse que talvez nós vamos pular,
mas talvez não vamos ver o que ele realmente está fazendo e para onde ele está indo. E agora você pode ver que Django estava reclamando. Django realmente diz, eu vou, nós não podemos usar o campo de imagem porque o travesseiro não está instalado, mas nós temos que ir e instalar o Pillow. Então vamos sair do Pip Env novamente. Pip instalar travesseiro com um P maiúsculo. Certo, vamos voltar para o nosso Pippin. E digamos que o travesseiro Pip mostra. E isso só vai nos mostrar que ele foi de fato instalado. Não temos que verificar todas as vezes. Eu gosto de verificar apenas para ter certeza, só porque eu tenho várias versões do Python e um monte de Python estranho soprando no meu computador. Só quero ter certeza que o travesseiro está instalado corretamente. Agora, se formos para este terminal e simplesmente
reiniciarmos o Django, não veremos mais erros. Não veremos mais reclamações. Então, isso é uma boa notícia. Agora, neste ponto, podemos ir e editar nosso Perfil de Usuário. Então vamos para o nosso administrador e vamos para perfis. E diz: “Oh, não, não há tal coluna. Bem, o que fizemos foi executar uma migração para miniatura do solo, mas não fizemos uma migração e depois executamos essa migração para o nosso novo campo no nosso perfil. Então vamos em frente e fazer isso. Vamos fazer Python gerenciado até alta fazer migrações. E porque estamos dizendo que não pode ser nulo ou em branco, temos que fornecer um único. Então o que eu vou fazer aqui é mostrar a vocês que eu vou digitar um para fornecer um padrão único. E como não temos uma imagem, vou digitar o número um. E isso é bom o suficiente para o que temos. Agora. Vamos em frente, fazer essas migrações e depois executar essas migrações. E vamos voltar para a atualização do nosso navegador. E podemos ver que isso funciona. Cuco legal. Então esta imagem tem atualmente um. Se eu clicar nisso, em primeiro lugar, ele vai para a porta de host local 8 mil barra 1 ponto uma pasta imediata. Ainda não preparamos isso. E a imagem é exatamente o que digitamos. Então, mesmo que tivéssemos a configuração da pasta de mídia, que não temos, isso ainda não mostrará uma imagem. Não há imagem chamada “Just One”. Geralmente é como 1.jpg, F1 dot PNG, 1.e qualquer coisa. E isso não está aqui. E foi isso que aquele fez. O que podemos fazer em vez disso é dizer “navegar”. E poderíamos selecionar como animado ab.js JPEG e salvar continuar editando e assistiu s, Isso entra em perfis animados. Isto ainda não vai ser encontrado e isso é normal. Observe que ele criou uma pasta chamada Perfis e, em seguida, um upload da imagem para nós. Então isso é tudo o que vamos fazer para esta lição específica que está chegando, vamos estar trabalhando para realmente fazer isso funcionar adicionando nossos URLs de mídia.
22. Adição de configurações de mídia: Ok, então não temos nossa configuração de URL de mídia ainda e precisamos fazer isso. A razão pela qual fazemos isso é porque basicamente ele diz Django para onde enviar todos os nossos arquivos. Agora se olharmos, se olharmos para isto na nossa coluna esquerda aqui, já
existe uma pasta chamada Perfis. E então ele apenas adicionou animado DOJ vinculado a ele. E esse sou eu como um personagem animado. Meu amigo Steve fez isso para mim. Então não queremos isso. Queremos que todas essas imagens entrem em sua própria pasta chamada mídia. Primeiro, o que vou fazer é apagar isto porque não pertence lá. E nenhum dano causado se você excluiu porque atualmente não temos URLs de imagem funcionando de qualquer maneira. Então, primeiro as coisas, vamos fechar isso e entrar em nosso settings.js. E isso é em algum lugar, eu não sei, eu acho que perto do topo. Vamos apenas fazer isso. Precisamos de uma raiz de mídia. Raiz de mídia é igual a algo. Os ponto, ponto juntar-se. E então a base terrível que vem da linha 16 logo acima de nós. E uma pasta chamada mídia. E então vamos dizer que URL de mídia, como isso deve ser
servido, vai ser barra de mídia com uma barra no final. Isso não é o suficiente para nos levar lá. Nós também precisamos ir para nossos URLs ou URLs do Django. E precisamos antes de tudo incluir nossas configurações porque vamos usar esses URLs de mídia
que fazemos a partir de configurações de importação do Django.com. E vamos precisar importar mais um aqui. E isso vai vir de URLs confidentes, esse é o papai. Eu acredito. Vamos copiar isso para que não tenhamos que digitar tudo de novo, estático. E queremos incluir é estática. Mais uma vez, isso ainda não é suficiente. Tudo o que fizemos foi importar algumas coisas. Na verdade, precisamos adicioná-lo aos nossos padrões de URL. Então, o que podemos dizer aqui é os padrões de URL mais estático, e então queremos que o URL de mídia settings.js. E a raiz do documento será a rota de mídia settings.js. E o que isso vai fazer é dizer, hey para seus URLs estáticos enquanto você está executando no localhost não em produção porque você não quer servir seus arquivos de mídia através do Django em produção, isso não é seguro antes do que estamos fazendo aqui , isso é totalmente ok. Vamos dizer conectar esse URL de mídia com essa rota de mídia. E vamos voltar e dar uma olhada nisso. Então. URL de mídia barra mídia. Então, seu website.com barra mídia. Com essa rota de mídia
que, aquela pasta que vamos acabar criando. Então vamos em frente e salvar isso. E vamos voltar ao Firefox. E podemos fechar essa. Vamos apenas atualizar página. Parece que nada mudou, mas se eu recarregar animado, salvar, continuar editando, parece novamente que nada mudou, mas este URL agora mudou. Este URL. A aparece e B diz, logotipos porta 8 mil tais mídias barra perfil barra barra animado. Tem aquela mídia lá dentro. E esses perfis estão vindo, se formos para modelos de perfis vindo de lá. E então agora nós podemos realmente ver no lado esquerdo em nossas pastas,
nós temos mídia e, em seguida, perfis,
e, em seguida, animado, esquivar um saco. Agora, se fizermos um status git, isso recebe status vai nos mostrar que podemos adicionar mídia ao nosso repositório e não queremos isso. Então queremos abrir nosso gitignore. E eu costumo jogar no fundo em algum lugar. Eu só digitei barra de mídia. E então se fizermos outro status do git aqui, podemos ver que a mídia não aparece. Então nós fazemos git add git commit, e então você pode fazer o seu commit git regular. E isso simplesmente não vai cometer ano todas as suas imagens para o seu repositório. Porque se você tiver 20304050 pessoas trabalhando em um repositório e todas elas estiverem adicionando suas próprias imagens de teste. Esse repo vai ficar muito, muito grande e você vai
baixar os arquivos deles toda vez que você fizer um pull git. E é que não é um lugar onde você queira morar. Então isso é realmente tudo o que há para isso. Vamos fazer uma breve recapitulação. Para adicionar seu URL de mídia. Adicionamos uma rota de mídia e URL imediata. Então vamos para nossos URLs dot pi, importamos estáticos,
importamos configurações, e então dizemos padrões de URL mais estáticos. E então conectamos esse URL de mídia com uma raiz de documento, que vai apontar para rota de mídia.
23. Adição de autores às posts: Uma taxa neste momento, agora
temos feed, perfis de mídia, modelos. Temos todo o tipo de coisas aqui. Vamos em frente e abrir o nosso feed. E o que queremos fazer é dar um Post e um autor porque atualmente não sabemos quem está postando nada. Pode ser completamente anônimo neste momento. E talvez não queiramos isso. Talvez queiramos que as pessoas sejam capazes de seguir umas às outras, como no Twitter, Instagram, qualquer coisa assim. E então o que precisamos aqui é de uma chave estrangeira para um autor. E assim podemos fazer o autor é igual a modelos e ponto chave estrangeira. E isso vai aceitar o usuário do Django, que teremos que importar em apenas um segundo. Excluir é igual dois modelos ponto cascata, o que significa que quando excluímos, este usuário, também excluir seus posts. E então, se voltarmos para o topo, poderíamos fazer a partir de Django.com, auth de ponto de
viagem, modelos de ponto, usuário de
importação. Acho que isso é ótimo. Eu tenho um tempo difícil lembrar este também, mas eu tenho certeza que é Django.com viagem dot-dot-dot modelos. Ele, eu salvei no Django, reiniciei e não houve nenhum problema. Então, presumivelmente, era tudo o que precisávamos fazer. Então vamos em frente e fazer migrações. E a razão pela qual fazemos migrações é porque adicionamos um campo de autor ao nosso post. Adicionamos qualquer campo ao nosso modelo, temos que fazer migração. Agora isso vai dizer, queremos sair e dar um padrão? Então, todas as postagens serão padrão para um determinado usuário, ou eu quero dizer fornecer um padrão único agora? E, você sabe, talvez nós mudamos manualmente na estrada. Eu vou dizer vamos providenciar um agora e podemos mudar manualmente na estrada. E eu só vou dizer que cada post vem do ID de usuário número um. E podemos lidar com as repercussões disso em apenas um momento. Então vamos em frente e fechar isso. E vamos olhar para os nossos posts. Oh, nenhuma coluna que realmente faça muito sentido porque nós fizemos essa migração, mas nós realmente não migramos ainda. Lá vamos nós. Vamos ver. Nosso primeiro post foi o autor Caleb. E então quando eu digitei em um, tudo o que fez foi encontrar o primeiro usuário. Onde estão meus usuários? Então eu tenho esses usuários aqui. E no topo, você pode ver o ID do usuário, um nesse URL. E foi daí que eu tirei essa. Se quiséssemos que todos os usuários fossem nosso usuário de teste ou que todos os posts fossem criados pelo nosso usuário de teste, em vez disso, diríamos número dois. E agora, quando adicionamos uma postagem, podemos selecionar um autor. Vai ser um usuário do nosso aplicativo. E podemos dar-lhe algum texto. E, atualmente, todos os nossos posts são de mim.
24. Adição de dados autor a modelos: Tudo bem, vamos em frente e adicionar nossa imagem de autor e nome a cada post. Então, se voltarmos ao nosso aplicativo aqui em nossa página inicial e atualizar, não
fizemos nada com o modelo e tudo é apenas o material padrão que encontramos aqui. Então vamos em frente e mudar essa imagem, e vamos mudar esse nome também. Então vamos em frente e abrir nossa página inicial. E aqui, porque queremos usar o nosso thumbnailing eu vivo biblioteca miniatura ou pacote thumbnailing. Precisamos carregar isso neste modelo. E isso apenas diz ao Django, hey, vamos estar usando um pacote chamado miniatura ou, na verdade, carregar um arquivo chamado miniatura. E permite usar todas as funções dentro de um arquivo ou módulo chamado miniatura. E assim podemos fazer isso. É onde estamos aqui? Onde estamos aqui? Precisamos substituir essa imagem e esse nome. Agora não temos autor, então podemos substituir esse nome imediatamente. Cada post tem um autor e cada autor tem um nome de usuário. E então vamos fazer essa conexão imediatamente. Cada postagem tem um autor que cria um objeto de usuário. E quando estamos em nosso admin e estamos olhando para os usuários, cada usuário tem um nome de usuário bem ali. Então vamos em frente e tudo bem, olha para isso. Cada post já foi feito por mim. Então é isso mesmo. Isso é, na verdade, correto. Vai fazer postagens mais tarde com diferentes usuários apenas para demonstração para demonstrar isso. Vamos mudar essa imagem. Agora essa imagem vai ser um pouco mais complicada porque estamos usando um pacote de terceiros. Então o que podemos fazer é voltar ao pacote de terceiros. E como usamos isso em nosso modelo? Nós carregamos miniatura. Foi de onde eu tirei isso. E então o uso simples está bem aqui. E usamos uma tag de modelo chamada miniatura. Nós damos a ele o URL ou o objeto da imagem, o tamanho da imagem, que tipo de corte queremos. E, em seguida, definimos como um nome de variável. E, em seguida, dentro de nossa imagem, podemos definir esse URL da imagem, essa largura da imagem, e essa imagem, eu acho que eu disse definir esse URL da imagem, altura e largura. Na verdade, só precisamos pegá-lo. E isso é o que esse alguém vai fazer. E, em seguida, dizemos n miniatura apenas para que possamos parar de usar esta variável IM em nosso modelo. Então, na verdade, o que eu vou fazer é literalmente
copiar isso e eu vou modificá-lo. Agora. Onde posso obter essa imagem de ly, obter essa imagem do nosso autor post. E se entrarmos em nossos perfis aqui, veremos que cada autor tem um campo um-para-um, ou cada usuário tem um campo um-para-um e esse usuário tem uma imagem. E então o que podemos fazer aqui é em vez de dizer o nome de usuário do autor do post, podemos dizer perfil do autor do ponto de postagem, acreditar que é o que chamamos. É um nome relacionado aqui, imagem de ponto de perfil. E isso conecta nosso nome de usuário ou
usuário regular ao nosso perfil usando o nome relacionado chamado perfil. E então nos dá acesso a tudo o resto dentro deste modelo aqui, incluindo imagem. E queremos que isto seja 100 por 100 com 373? Então vamos fazer a mesma coisa aqui. 373 por três, 73, centralização é bom. E vamos apenas recuar isso. E agora precisamos mudar esse URL para que a fonte, essa fonte de imagem não será mais de um splash. E fonte de imagem vai ser I M dot URL. E eu tenho isso daqui. Eu sou ponto URL. Vamos em frente e salvar isso. E vamos ver o que acontece. Tenho um erro de digitação? Talvez, talvez não. Aha, olha, lá estou eu. Isso sou eu. Me animou. Agora vamos em frente e adicionar mais um post e ouvir de outra pessoa para que saibamos que não é só eu lá dentro. Vamos em frente e criar um novo post. Um bilhete. No entanto, vamos adicionar um post. Isso é o que queremos. Isso é de um usuário de teste. O autor vai ser um teste. Salvar. E vamos entrar em nossos perfis. E vamos editar nosso usuário de teste. Porque essa imagem vai ser uma atualmente não encontrada, não é útil. Vamos mudar isso para aquela foto minha. Salvar. Lá vamos nós. Por isso, está de facto a funcionar. Agora, isso não está vinculando a uma exibição de perfil. Isso não é vincular a uma exibição de leitura mais ou a uma exibição dedicada. Vamos começar com isso muito em breve. Mas, por enquanto, só precisamos de pôr esta imagem e esse nome a funcionar.
25. Visão de detalhes: Tudo bem, vamos em frente e adicionar um post vista detalhada e um link. Na verdade, este pode ser limpo do último vídeo. Oh, não, isso é não, isso ainda está praticamente correto. Nós ainda precisamos realmente ter esse URL lá dentro. Então adicione o URL abaixo. Então vamos fechar isso e talvez nos abrir. Vamos para URLs de alimentação. E nós já temos um URL da página inicial aqui,
e vamos em frente e definir um novo URL. E então o que podemos fazer é basicamente copiar isso e uau, nós não tivemos que copiar isso. Não vamos copiar isso pelo caminho. Eu vou dizer int, e isso vai ser um PK. Vou descrever o que são em um segundo com uma barra. Isso é o que isso vai ser, basicamente o nosso URL, então o nosso website.com barra e, em seguida, um post vistas ponto post detalhe vista como vista. Ainda não criamos isso, mas vamos, e vamos dar a isso um nome de detalhe. tão detalhada. Agora a exibição de detalhes da publicação não existe. Precisamos fazer isso existir de onde vem isso? Nossos pontos de vista. E há realmente um erro de sintaxe bem aqui. Lá vamos nós. É o que deveríamos dizer. Devemos ver o módulo phi dot views não tem nenhum atributo. Publique uma exibição detalhada. Vamos em frente e adicionar isso. Então, podemos fazer visão detalhada post classe. E esta vai ser uma visão detalhada. Então nós precisamos ir e importar isso
na visão detalhada muito superior que vem de nossas views genéricas do Django. Vamos ir em frente e dizer nomes de método HTTP é igual a uma lista e só obter como disponível. Isso pode ser o padrão, mas eu gosto de definir que de qualquer maneira, o nome do modelo vai ser feed barra detalhe HTML. É onde isto vai viver. E dizemos “feed “, porque isso vem daqui, namespaces. Então, se tivéssemos 20 outros aplicativos, talvez adicionássemos feeds e feeds. Plural, seria importante para namespace o. Então, se tivéssemos alimentar esses detalhes e alimenta detalhes de barra, poderíamos dizer pés ou feeds barra detalhe. E então apenas um tipo de namespaces são templates para nós porque o Django vai procurar todo o lugar por um template e você nunca sabe qual deles vai encontrar primeiro. Na verdade, isso não é verdade. Você provavelmente saberá de um. Encontrará primeiro quando mostrar o errado. E você não quer se deparar com esse tipo de confusão. O modelo vai ser um modelo pós-modelo. E o nome do objeto de contexto por padrão, eu acredito que é geralmente objeto, mas eu gosto de mudar isso para ser o nome do meu modelo. Vai ser postagens. Então, no modelo eu posso apenas escrever post. Não, poste. Agora vamos voltar para nossa página inicial e vamos adicionar um link para este URL detalhado aqui. Então essa ligação, de onde é que isso vai vir? Então dizemos abrir nosso URL de sintaxe, detalhes de
feed, e então nós damos a ele um ID para que post.ALL. E vamos rever rapidamente o que acabei de fazer lá. Então, para cada post, em posts, se eu entrar em modelos, sabemos que há um ID e podemos ver esse ID se entrarmos em nossas migrações iniciais, cada modelo tem um ID. Cada modelo tem um ID por padrão. E então é aí que estamos obtendo essa identificação. A ocasionalmente, você verá em vez de ID, você verá as letras pk, chave primária. No Django. São a mesma coisa. Então feed é nosso aplicativo, e isso vem de nossos URLs de namespace. E então detalha o que acabamos de escrever em nossas URLs. Então esta é a parte de detalhes, esta é a parte de alimentação, detalhe talão. Para ir em frente e salvar isso. E quando atualizarmos nossa apresentação, devemos ver que isso agora vai para uma URL e isso vai para barra para o post número quatro. E isso é tudo o que há para isso. Nós só temos que adicionar nosso modelo a isso. E então nós realmente temos esse link funcionando. Agora, se eu voltar e clicar no anterior a
este, isso vai para três e voltar e ir para o anterior, ele vai para dois.
26. Modelo de detalhes: Tudo bem, vamos em frente e adicionar uma visão detalhada a cada post. Então dissemos que o nome do modelo tem que ser feed barra detalhe index.html. Então vamos em frente e adicionar detalhe dot HTML em nossos modelos aqui. Então alimentar, modelos, feed. Vamos adicionar um novo arquivo aqui chamado layout.html detalhado. E vamos fazer este teste. Vamos nos certificar de que isso funciona antes que cheguemos muito longe nisso. E funciona. Então agora sabemos que queremos estender a partir do nosso arquivo HTML ponto base para que tenhamos todas as nossas guloseimas lá. Nesse arquivo HTML ponto base. Temos corpo e um bloco de título. Então, queremos esse bloco de título aqui. Vamos em frente e copiar isso. E para mudar esse título para ser, não
vamos fazer nenhuma loucura ainda. Vamos fazer um título personalizado só para garantir que isso funcione. Também podemos adicionar corpo de bloco, mais coisas aqui. E não é estender é estende. Se você gritar e gritar San Kayla, você fez errado. Ok, lá vamos nós. E o título diz um título personalizado. Ok, vamos em frente e mudar nosso título personalizado para ser todo o nosso post, post dot text por post dot author dot username. E este será um título bastante longo. Se o seu post é como 240 caracteres, este vai ser um título super longo. Como isso teria, este é um segundo post de Caleb, Cuckoo. Cuco. É quando estamos olhando, voltamos. Isto é de um usuário de teste por teste. Mais coisas aqui não mostram nada. Mas o que poderíamos fazer é dizer texto pós-doc. E mostra a nossa pequena mensagem. E então agora está se movendo. Este é um segundo post. Este é o segundo post do nosso ListView para a nossa visão detalhada. E se você está se perguntando de onde eu tirei isso, em nossa vista de detalhes post, Eu tenho modelado como igual a postar. E o nome do objeto de contexto é igual a postar. E é por isso que somos capazes de usar texto pós-doutorado, não objeto e 0.2x, que é o que seria por padrão, é texto pós-doc. Agora vamos em frente e fazer isso parecer um pouco mais agradável. Então eu já tenho um componente alinhado, um que eu gostaria de usar. É este aqui. O que posso fazer é simplesmente copiar esse código. E vamos colar esse código aqui. E precisamos de um encontro. E isso vai ser um encontro pós-doutorado. Não estamos usando categorias, não
estamos usando títulos e queremos apenas enviar mensagens de texto aqui. Então vamos em frente e mudar isso para ser o nosso texto post dot. Vamos dar uma olhada. E como isso parece até agora. demasiadas chaves encaracoladas lá. Não lemos mais, não
precisamos disso lá, lemos mais e nos livramos disso. E basicamente o que estamos fazendo aqui neste momento, estamos pegando tudo aqui da nossa página inicial e vamos apenas copiá-lo. E, na verdade, podemos fazer isso tudo. Então, em vez de percorrer o caminho mais longo e fazer tudo manualmente, o que podemos fazer é entrar aqui, colá-lo da nossa página inicial. E diz etiqueta de bloqueio inválida na linha 22, miniatura. E isso é porque não carregamos isso. Temos que carregar em miniatura. Portanto, carregue miniatura. Agora ha, e isso está parecendo muito bom. Agora temos esse problema em
que temos um link Read More e já estamos na exibição detalhada. Então isso só vai se ligar a si mesmo. Então isso não é bom. Como nos livramos disso? Bem, o que podemos fazer é mover isso em seu próprio modelo para incluir e dar-lhe uma variável personalizada para dizer se algo aparecer ou algo não aparecer? E em nossa próxima lição vamos falar sobre a tag de modelo de inclusão.
27. Incluir etiquetas: Ok, vamos em frente e adicionar uma tag de inclusão. Então o que eu estou dizendo aqui é que eu vou apenas mover isso para um lugar onde eu possa classificar incluir. E a idéia aqui é que podemos escrever código semelhante ou o mesmo código mais de uma vez em, ou melhor, apenas uma vez em um lugar e incluído em mais de um lugar. E então temos este código aqui em nossa visão detalhada. E é idêntico ao que está na nossa página inicial aqui, exatamente
o mesmo código. E então o que podemos fazer aqui é basicamente cortar esse código e podemos ir para um lugar que ele vai procurar modelos. E ele vai procurar modelos em modelos TIL. Vamos em frente e criar um novo arquivo. Vou dar-lhe uma pasta chamada inclui primeiro inclui. E eu vou chamá-lo de post.html. E eu vou simplesmente colar tudo isso aqui. E em nossa página inicial em vez de escrever todas essas coisas, o que podemos avaliar em vez disso é incluir, inclui, Essa é a pasta que eu coloquei, post.html com alguns contextos. Então esse ponto vai ser um post. E assim, para cada postagem à direita aqui, esse é esse. Nós também vamos jogá-lo neste post.html com o nome do post, que só vai nos permitir escrever este postdate, postar textos. Todas essas coisas boas. Então vamos em frente e salvar isso. E vamos ver se eu tenho algum erro aqui na página inicial. Vamos para a página inicial. Oh, olhe para isso. Eu não carrego miniatura. Então, na nossa página inicial, temos miniaturas que não são necessárias porque não são usadas neste arquivo. Se entrarmos em nosso post.html, podemos realmente simplesmente copiar e colar isso lá e cortar e colar isso lá dentro. E isto vai funcionar para nós. E a razão para isso é porque esta miniatura está realmente sendo usada nesta página inicial do arquivo. Não está sendo usado nesse arquivo. Então vamos em frente. E, a propósito, isso estava dentro do loop for em nossa visão de detalhes. Vamos em frente. E em nosso corpo, basta colar isso lá também. Nós vamos dizer incluir, inclui barra post.html com post é igual a postar. E não precisamos da miniatura porque as miniaturas não estão mais sendo usadas neste arquivo, só estão sendo usadas em post.html. Então vamos salvar tudo isso e atualizar. E vamos para aqui. E parece que está filtrando, o que é bem perto. É isso que queremos. Agora, o que acontece se não quisermos que isto leia mais aqui? Já estamos na vista de detalhes. Não precisamos nos vincular a essa exibição detalhada. Vamos em frente e adicionar uma nova variável de contexto aqui. Mostre detalhes. Link é igual a true. E vou copiar esse nome. E no meu post.html, vou colocar uma leitura mais aqui. Então, se não uma leitura mais, como é a leitura? Ler mais? E tentando fazer muitas coisas ao mesmo tempo. Sem visualização detalhada. E eu não me importo que haja um erro de digitação lá. Vou consertar isso daqui a pouco. E então o que estamos dizendo aqui é quando você incluir post.html, também colocar no post e mostrar link detalhado dentro deste arquivo. E assim, se Mostrar link Detalhe existe e é de fato verdadeiro, podemos mostrar esse link Leia Mais. Caso contrário, ele vai dizer nenhuma visão detalhada. Na nossa visão detalhada. Não há visão detalhada e isso é porque não colocamos isso lá. Esta é a nossa visão detalhada, esta é a nossa página inicial. No entanto, se formos para a nossa página inicial, esse link ainda aparece. E isso é exatamente o que queremos. Agora não precisamos que nenhum texto de visualização de detalhes lá. Então, vamos clicar nisso e isso move tudo de novo. Então talvez nós, talvez nós realmente queremos um pouco de alguma coisa lá dentro. Vamos, vamos apenas adicionar uma extensão. E nbsp, apenas uma força aquele texto ali. E isso é só porque estamos usando flex e isso se justifica entre. Precisamos de pelo menos dois itens aqui. Ou o item ler mais ou o espaço vazio mais uma div para tudo isso. Agora o que é bom sobre isso é quando fazemos isso neste incluem, quando escrevemos um inclusão, não
precisamos passar por vários arquivos e alterar esse URL mais tarde. Podemos apenas passar pelo arquivo post.html, mudar de uma só vez. E isso vai mudar para nós em vários lugares. Então, atualmente, este link não vai absolutamente a lugar nenhum. E na página inicial, esse link também não vai a lugar nenhum. Mas uma vez mudamos isso porque ambos estão apontando para o mesmo arquivo. Detalhes inclui post.html e páginas iniciais, incluindo post.html. Só temos que alterar o conteúdo ou os URLs ou a estrutura em post.html.
28. Post: Vamos em frente e criar uma nova visualização de criação para criar postagens, porque agora só podemos criar postagens através do administrador. Então essas coisas aqui, vinculando a uma visão de perfil, voltarão a isso em um pouco. É por isso que temos um trabalho escrito aqui. Então vamos fechar todas as coisas da nossa última lição. E quando estamos criando uma nova visão, o que queremos fazer é ir para nossas URLs e só queremos escrever algo novo aqui. Então vamos escrever, bem, primeiro lugar, vamos dar uma vírgula no final lá. Caminho. Novo com a barra. Vamos adicionar visualizações. Criar novo post.All como exibição. E o nome vai ser, eu acho que novo post. Agora, isso não existe. No Django está reclamando disso. Então, precisamos ir e criar um novo criar novos posts vista dentro da nossa visão é classe de arquivo. Criar nova postagem. Ainda não sabemos que tipo de modelo será este. Precisamos criar algo. Nós precisamos. Está literalmente no nome. Precisamos criar a postagem. Então vamos usar uma coisa chamada criar vista. E de onde isso vem é do Django,
ponto, ponto, ponto, genérico, ponto, editar, importar, criar view. E isso é parte de nossas operações crud, operações crud. Então, agora este novo
criar, criar novas postagens visualização precisa ter um modelo e ele vai criar um novo post. Vamos dar-lhe um nome de modelo. E isso vai ser alimentação elegante cria ponto HTML, que por sinal, se você não sabe o que vem em uma visão criar, você sempre pode ir para CC BY VSCO WK. E isso mostrará vistas baseadas em classes de classe para o Django. E isso vai literalmente mostrar tudo o que você quiser ver. Você quer ver o que uma visão de criação tem, todos os métodos e propriedades nele. Você pode ver todos eles lá. E os campos que queremos adicionar no seu, Bem, vamos abrir nossa nota pós-moderna. Vai para alimentar modelos. E a única coisa que queremos acrescentar é texto. Queremos que o autor seja adicionado
automaticamente para que eu não possa criar uma postagem em seu nome. Então vamos em frente e dizer que o único campo lá vai ser tributado. E isto vai ser uma lista. Agora precisamos criar isso cria o arquivo HTML ponto. E então nós dissemos que ele vai estar no arquivo HDF5 feed em nosso modelo. Então novo arquivo, modelo vai ser criar ponto HTML. E vamos em frente e estende nosso arquivo HTML ponto base. E vamos dar um bloqueio, título. Crie uma nova postagem. E vamos dar-lhe um bloco de corpo. E aqui podemos dizer ponto de forma como P. E isso vai colocar todos os nossos itens de formulário em tags de parágrafo. Isso é bom e tudo mais, mas não há nenhum link aqui para realmente ir criar um. Então vamos criar um novo link aqui. Então vamos abrir nossa página inicial. Não, vamos abrir o nosso HTML de ponto base e já está dobrado. Então, digamos que se o usuário está autenticado, ele pode fazer logout. Assim, eles também podem criar um novo post. Então vamos copiar isto. E vamos dizer New Post. Agora, de onde vem essa ligação? Esse link vem do feed New Post. Então precisamos adicionar isso aí. Então, nós digitamos feed dois-pontos New Post. E provavelmente vamos querer mudar esse ícone. Mas, por enquanto, vamos ver se isto funciona. New Post vai para nu. Temos uma mensagem lá dentro. Isso está funcionando agora isso não vai realmente criar um novo post neste momento. Então, se você quiser testar isso e não funcionar, isso é normal, isso é esperado. Temos mais algumas coisas que precisamos fazer aqui. Esse New Post, porém, vamos em frente e mudar esse ícone. E então de onde vem isso? Isso vem do ícone Box. Então vamos ver esses ícones de caixa. O Google é o seu melhor amigo. E procurar. Além disso, talvez. Vamos adicionar camada mais. E então nós clicamos sobre isso e ele diz que o nome é camada mais. E isso é um componente Web. O HTML em linha reta, isso é muito legal. Não sabia que podíamos fazer isso como fonte. Queremos Bx, Bx layer plus. Agora parece um pouco diferente do que eu fiz. Onde estamos? Onde estamos? Onde estamos? Bx, logout Bx. Queremos camada mais. Lá vamos nós. Agora podemos ir para o nosso novo post view. Agora temos um problema com isso. O problema é que qualquer um pode vir aqui e essencialmente tentou criar um novo post. Agora não está ligado, então não vai funcionar. Mas qualquer um pode entrar. Então vamos copiar isso e abrir uma nova janela de navegação anônima ou privada. E funciona para mim enquanto não estou logado. E então precisamos forçar o usuário a ser conectado. Podemos fazer isso facilmente. Vou te mostrar como fazer isso na próxima lição.
29. FORÇar: Tudo bem, vamos dar uma olhada em como podemos forçar o usuário a ser conectado. Porque
no momento um usuário não precisa estar conectado para tentar criar uma postagem. E não queremos isso. Queremos que eles estejam sempre logados. Então vamos em frente, abrir nosso editor e fechar tudo. E eu vou mostrar a vocês a maneira mais fácil de fazer isso. E entramos em nossas visões e vamos importar essa coisa chamada mixin. Então, do Django dot contrib, nope, dot auth, dot mixins. Agora vamos descobrir se isso está errado. Django vai reclamar muito alto. Isto é errado. Faça um login, necessário, misture. Vamos ver se isso está certo. Vamos salvar isso e ver o que Django diz. Agora. Certo, isso deve ser lido. Assim que login necessário mixin. Agora podemos colocar em nossa visão de criação e herdar duas classes ao mesmo tempo. E então o que isso vai fazer é dizer, hey, se o usuário não está logado, chutá-lo para fora. Caso contrário, se esse usuário estiver conectado executando tarefas irregulares de exibição de criação. Por isso, estou logado aqui. Isto vai funcionar. E quando abri uma navegação privada, não estou logado. Então ele não funcionou para mim e me expulsou e me trouxe para
a página de login e disse que a próxima vai ser a nova URL. Então agora eu posso fazer login aqui. E então ele me traz para a nova página de postagem.
30. Criando um novo post: Ok, vamos trabalhar um pouco com o nosso Formulário View aqui. Então visão de forma interna, não nossa visão. Talvez vamos trabalhar com o nosso modelo primeiro. Isso vai ser um pouco mais engraçado, eu acho. Então, digite modelo. Temos este formulário aqui. E enquanto isso é bom, e parece que está fazendo o que queremos que faça. Se eu clicar com o botão direito do mouse e inspecionar você vai ver que é apenas um parágrafo, há uma div, um parágrafo, um rótulo, e uma entrada. E, apesar de tudo bem, não temos um formulário. Então, como submetemos isso? Como submeteríamos isso? Isto simplesmente não funciona. Eu posso apertar enter quantas vezes eu quiser, e isso simplesmente não vai funcionar. Então precisamos embrulhar isso em um formulário. Então vamos fazer exatamente isso. E vamos fazer a forma. Método é igual a postar ação vai ser sua própria página. Então, seja qual for a página, seja qual for a URL de origem, nós simplesmente queríamos postar para si mesmo. Então precisamos de algum tipo de botões de envio. Então vamos em frente e adicionar uma div aqui. E então eu quero adicionar um bom botão e já tenho um componente alinhado para isso. É este simpático. Eu queria este botão Enviar, eu quero aquele bom lá dentro. Vamos copiar todo o código. Vamos copiar o envio. Esse é o primeiro lá. E eu só colei isso lá dentro. E vamos ver como isso se parece no início. Certo, não mande nada ruim, nem ruim. Por que estou me enchendo um pouco? E Button está agindo estranho. Oh, ele tem margem em todo o caminho em torno dele. Digamos que a margem x vai ser 0, margem y vai ser três. E isso para alinhá-lo um pouco melhor. Acho que podemos sempre fazer isso parecer melhor, muito mais fácil. Então, em vez de dizer enviar, digamos criar post. E este botão, seu tipo vai ser Enviar. Agora, quando você enviar um formulário no Django, você verá uma verificação CSRF, solicitações
com falha, um embarcado. E assim, sempre que você vê isso, o que você precisa aqui é um CSF, token
CSRF, C, S, R, F token de sublinhado. Então, agora, quando vamos em frente e atualizar e testar isso, pelo
menos estamos recebendo um erro diferente neste ponto é dizer não nulo, restrição, falha. O ID do autor da publicação precisa ser preenchido. E isso é porque vamos alimentar modelos. Nosso autor não está sendo colocado dentro de nossa forma. E então, se voltarmos para a nossa visão de criação, dissemos que os campos são apenas texto, não o autor. Se adicionarmos autor, isso pode parecer um pouco diferente. Agora podemos selecionar de quem ele postou, que não é o que você quer quando você está no Twitter, você não quer ser capaz de selecionar entre 340 milhões de outros usuários ou quantos usuários eles quiserem. Uma lista muito longa. Além disso, você não quer ser capaz de postar em nome de outra pessoa. Você quer que seja um pouco mais seguro do que isso. Então não colocamos isso aí. Mas está reclamando que não está lá. Então o que precisamos fazer aqui é dizer formulário def válido. Quando este formulário é válido, ele toma um eu e a própria forma. E no final, independentemente do que fizermos, precisamos retornar a forma super ponto-ponto, válida sem forma. E aqui, vamos em frente e pegar esse formulário. Vamos chamá-lo de objeto. Então form, dot save and commit vai ser false, o que significa que simplesmente não vamos salvar isso ainda. Vamos pegar o formulário e todos os detalhes acabaram, mas não vamos salvá-lo ainda. Então podemos fazer objeto é igual a um objeto. Autor é um, é igual a solicitação. Esse usuário, não temos solicitações e
vamos precisar adicionar isso em apenas um segundo. E então podemos fazer OBJ dot save. Agora, de onde vêm os pedidos? Se você tentar isso, você vai receber um erro. Então precisamos jogar isso na central. Então fazemos um despacho surdo. Auto-pedido, args e quarks são ovos. E quarks. Devolver super ponto despacho, pedido, args e quarks. E você percebe como temos pedido aqui. Bem, esta é uma classe, então podemos fazer auto-pedido de idade é igual ao pedido. E aqui em baixo podemos acessá-lo com pedido de auto-idade. E despacho será sempre executado antes de funções como formulário válido. Vamos ver que tipo de erros temos aqui, ali mesmo não deve ter dois pontos. E isso parece funcionar. Ok, mais uma coisa que precisamos fazer é em uma visão de criação, precisamos de uma URL de sucesso. Então, o que acontece quando o formulário é enviado com sucesso? Podemos dizer que o URL de sucesso será apenas a nossa página inicial. Ou podemos revertê-lo para ser nossa página inicial usando o Django, revertendo URLs e basicamente dizer, sempre voltar para nossa página de índice, mas nossa página de índice sempre será codificada para ser a mesma. Neste caso em particular
, será sempre o mesmo. Ou páginas iniciais sempre, sempre, sempre vai ser apenas uma barra. Então vamos em frente e dar uma chance a isso. Posto de teste número um, criar postagem. E aí está, posto de teste número um. E eu posso entrar aqui, postou o número um que está trabalhando para mim. Agora somos capazes de criar novas postagens.
31. Modal do Tailwind CSs: Tudo bem, vamos adicionar um modal de vento de cauda para que possamos iniciar o Ajax e novas postagens na página. Agora eu já tenho um escolhido e eu acabei de recebê-lo de tailwind components.com. Eles têm um monte de grandes componentes aqui. E este é o modal que eu quero usar. E um modal é apenas uma pequena caixa de diálogo na frente de todo o seu outro conteúdo que diz, hey, você concorda com o usuário de cookies? Ei, você quer confirmar ou negar fazer isso? E então eu estou literalmente apenas indo para copiar este código. E eu vou fechar esses arquivos e ir para o ponto base HTML. E na minha base para HTML na parte inferior. Certo, vou colar todo esse código aqui. E eu nem sei como esse código é ainda. Então talvez esteja muito escuro. Então nós realmente queremos que esse fundo seja um pouco transparente aqui. E assim, no reino do vento de cauda, podemos fazer isso. Então nós temos BG cinza 800. Podemos também fazer a opacidade BG 90. E isso faz um pouco mais transparente. E se quiséssemos fazer o lago? Podemos fazer 75? Sim, podemos fazer 75. Vamos ficar com 75. Isto parece muito bom. Não vamos ter um título modal, pois não? Sim, talvez nós vamos. Novo post. Agora, não bipe New Post. E o texto que vai estar aqui vai ser algum tipo de forma. Então vamos colocar um item a fazer aqui para adicionar o formulário Ajax. E podemos manter os botões Fechar lá dentro. Vamos atualizar este novo post. Hoje vai estar lá dentro. Vamos mudar isso de Concordo para criar postagem. E, de fato, vamos para a nossa visão de criação. E vamos pegar este botão porque eu realmente gosto desse botão. E vamos, vamos colocá-lo ao lado dele. Vamos ver o que precisamos mudar aqui. Então eu copiei e colei isso. Legal, isso realmente funcionou muito bem. Vamos em frente e corrigir esse recuo. Exclua essa, e vamos excluir a próxima porque não temos x aqui, não
precisamos de tão perto. Então lá vamos criar postagens e um fechamento. Vamos criar postagem. Podemos fazer algo um pouco menor aqui? Podemos fazer SMS SM? Sim, isso faz um estofamento um pouco menor. Y vai ser um preenchimento, x vai ser três fontes e tornar este um botão
menor olhando que vamos criar post. E talvez vamos adicionar uma margem ao topo aqui. E mais uma vez, isto é apenas vento de cauda normal. Então, se você não tem certeza do que qualquer um deles faz, um, você pode simplesmente ler através deles, o que é realmente bom tailwind como uma primeira biblioteca utilitário. E a documentação é realmente muito boa. E assim podemos fazer margem superior, e vamos fazer margem superior de C4. Faz qualquer coisa. Lá vamos nós, pequena margem lá. Criar postagens. Agora não vai fazer nada. E eu acho que o que eu gostaria que nós fizéssemos é
preparar isso para o sucesso e nas próximas duas lições. Então, primeiro de tudo, js modal é o que eu vou chamar isso. E eu também quero que isso seja escondido por padrão. E esse botão, esse botão enviar embora queiramos trabalhar com aqui. Vamos mudar isso de Enviar para botão porque vamos usar JavaScript para isso. Isto vai ser chamado JS enviar. E nada aparece, está completamente escondido. Temos mais uma coisa a fazer aqui. Se um usuário não estiver conectado, este componente não deverá aparecer. Então, podemos dizer se solicitação dot user_data é um non ne miss, podemos pegar todo esse código fora dente. E se, e ainda parece que nada aconteceu. Mas a idéia aqui é que este modal não deve aparecer. Na verdade, vamos fazer uma pequena demonstração aqui. Vamos, onde eu coloquei escondido? Oculto foi chamado escondido para. Isso não é um nome de classe. E isso não é aparecer. E é por isso que testamos as coisas. Porque eu disse que se solicitar que o usuário é anônimo, podemos dizer se solicitar que o usuário é autenticado, o que eu originalmente ia fazer é dizer, se não anônimo, mas poderíamos fazer a mesma coisa para tipo do oposto. Ou podemos dizer se solicitar que o usuário é autenticado, em seguida, mostrá-lo. Lá está ele. E vamos escondê-lo. Feito. E isso é tudo o que vamos fazer por esta lição. Nós só queríamos adicionar um bom modal de vento de cauda que
possamos começar a adicionar coisas a ele um pouco mais abaixo da estrada.
32. Ativar arquivos estáticos: Ok, agora antes de
continuarmos, precisamos adicionar arquivos estáticos e pastas ao nosso aplicativo. Então vamos em frente e fechar isso. E nós vamos querer abrir nossas configurações dot py. Então, em algum lugar aqui, vou jogar isso no fundo. Queremos arquivos estáticos e ver isso todos os arquivos estáticos em maiúsculas. Diretórios é igual a uma lista. E nós vamos dizer OS dot,
dot junte-se ao nosso diretório de projeto, que nós configuramos em uma lição muito anterior. E vamos chamar-lhe front-end. Então vamos adicionar uma rota estática, não status, mas uma rota estática é igual a SO e ponto, ponto join. E então queremos juntar esse diretório base com estática. E por último, queremos nossa URL estática e colocar isso em uma nova linha. São URL estático vai ser barra estática, que se parece muito com o nosso URL de mídia. Este é exatamente o lugar onde nossos ativos estáticos serão construídos. Agora, um ativo estático é como seu próprio arquivo JS ou seu próprio arquivo CSS dentro de seu próprio aplicativo. Nós não cobrimos isso no Django 101. Agora vamos em frente e criar um novo arquivo aqui. E vamos criar um monte de pastas primeiro. Então a primeira pasta será front-end, e isso corresponde ao que escrevemos na linha 156. E, em seguida, uma subpasta chamada JS,
e, em seguida, um arquivo chamado main.js. E nós simplesmente vamos dizer console.log, olá mundo com o coração. E, em seguida, em nosso ponto base HTML, o que podemos fazer é no topo podemos dizer load static. E na parte inferior, onde queremos carregar nosso JavaScript estático, poderíamos simplesmente dizer script SRC é igual a js slash main.js estático. E vamos nos certificar de que isso é uma corda. Agora vamos para a nossa página aqui e entrar no console. Então eu só fui clique com o botão direito, Inspecionar Elemento, console, atualizar e nada acontece. Então o que queremos fazer neste momento é que queremos digitar Python managed dot py, coletar estático e assistir o que ele faz. À esquerda, aqui vai criar uma pasta estática para nós. Aí está a nossa pasta estática. E assim nossa pasta estática sempre que executamos esta estática aqui, e o que precisamos fazer é fechar isso. Sempre que executamos esta tag de modelo estático, esta função, ele vai então olhar para a frente esta pasta, este arquivo. E isso vai entrar aqui, js, main.js. E então basicamente apenas copiado sobre o nosso código da nossa pasta front-end para uma pasta estática. Então vamos em frente e atualizar. E diz olá mundo, sinal do coração. E menos de três. Agora avançando, podemos fazer o que quisermos na frente? Alô, aqui é front-end. Na verdade, podemos. E então a razão pela qual coletamos estática é porque idealmente, não queremos que todo o nosso código front-end seja executado. Queremos que ele seja executado a partir de nossa pasta estática. E assim é assim que fazemos isso e usamos o comando collect static para coletar todos os nossos arquivos estáticos para que quando estamos em produção, Django saiba onde encontrar as coisas. Podemos dizer, hey engine X, em vez de usar o Django ou podemos dizer hey engine em seguida, procurar por todos os nossos arquivos admin em barra estática admin ou algo ao longo dessas linhas. Então, avançando, podemos colocar todo o nosso código no front-end slash js, slash main.js. E quando você vai implantar seu aplicativo algum
momento no futuro, sempre que você estiver pronto, você apenas certifique-se de digitar Python managed dot py, coletar estático. Ou se você não quiser, assista isso. Vai pedir-me informações. Tem certeza de que deseja continuar? Ele vai substituir um grupo de arquivos que eu poderia digitar sim, ou eu poderia digitar Python gerenciado dot py coletar traço estático, traço, nenhuma entrada traço. E não vai pedir, só vai fazer isso. Por último, mas não menos importante, precisamos. Se fizermos um status git aqui vamos ver algo interessante. Queremos confirmar nosso código front-end, mas nosso código estático tem todas essas coisas de administrador e ele vai
ter um monte de outras coisas lá, bem como seu aplicativo cresce. Nós não queremos confirmar nossa pasta estática. O que queremos fazer é ignorar essa pasta estática e apenas confirmar as coisas que mudamos em nossa pasta front-end. Então vamos abrir nosso gitignore. E na parte inferior onde diz mídia, vamos digitar estática. Vamos fazer um status git mais uma vez. E não aparece mais. E estamos prontos para ir. Temos nossos arquivos estáticos funcionando. Então agora podemos escrever nosso JS em um arquivo em nosso projeto e não temos que escrever tudo. Bem internamente. O que eu quero dizer com isso é que se você não é um desenvolvedor de JavaScript é que nós não temos que escrever nosso JavaScript aqui. Não temos que fazer isso. Podemos escrever todo o nosso JavaScript em um arquivo e, em seguida, podemos aplicar cache para isso. Então, esse é o seu script, ou só carrega ou baixa uma vez, ou é pelo menos muito, muito rápido de carregar para seus futuros visualizadores de sites.
33. Como adicionar JavaScript: Tudo bem, vamos em frente e adicionar jQuery. Então, as primeiras coisas primeiro, vamos apenas ir para o site jQuery dot é um jQuery.com. É JQuery.com. Baixar jQuery. Ou em vez de fazer isso, poderíamos fazer jQuery CDN, e estamos na versão 3.5.1 agora. Então vamos e obter a versão mais moderna. Tem algum CDN aqui? Agora este é o CDN, Google, Google, Google. Ok, então nós queremos a versão minificada. Queremos cheio. Então eu vou fazer isso. Na verdade, não, não vamos fazer assim. O que fazer CDN JS. E isso é atuar, vamos copiar a coisa toda. Então copie a tag de script. E isso vai nos dar 3.5.1 jQuery dot main.js. Então já foi minificado. Então todos os espaços e coisas foram removidos. E vamos apenas jogar isso na frente do nosso main.js ou main.js pode então executar qualquer tipo de jQuery. A seguir, para as chamadas do Ajax, temos uma estranha que não vou passar por toda a coisa. E isso é o que parece antes de fazermos qualquer tipo de ajax. Vamos montar o nosso Ajax. E o que isso vai fazer é procurar onde você está, onde você está, onde você está? Um token CSRF vai definir
esse cookie para que não tenhamos que configurá-lo em cada solicitação Ajax. Agora, eu recomendo apenas baixar o código-fonte e copiar e colar isso e certificar-se de que é antes do seu main.js e você pode até jogá-lo diretamente dentro do seu main.js. Na verdade, vamos em frente e fazer isso. Vamos apagar isso. Apague isso. E vamos entrar no nosso main.js e vamos jogar isso aqui. E a idéia aqui novamente é que lembre-se quando estávamos tentando criar um novo post e recebemos esse erro de token CSRF. Bem, com o Ajax, não sabemos necessariamente como submeter isso. Mas os tokens CSRF são cookies. E assim podemos definir um cookie, ou melhor, podemos obter o cookie, então podemos definir o cabeçalho da solicitação para usar o token CSRF XSS para que no futuro, quando fazemos uma solicitação ajax, não
precisamos necessariamente aplicar um token CSRF aos pedidos de Oliver Ajax. Agora há muita coisa acontecendo aqui, e este não é um módulo JavaScript. O Django to1 não é destinado a cobrir muito JavaScript, apenas um pouco. Mas se você não está familiarizado com isso, eu recomendo altamente verificar para JavaScript, um-para-um JavaScript para JavaScript através de qualquer um dos meus outros cursos JavaScript. Então vamos voltar aqui e nos certificar de que as coisas estão carregando da maneira que esperamos. Legal, não temos um favicon, então tudo bem. Agora temos jQuery e instalar, instalado. E o que podemos fazer é clicar com o botão direito do mouse inspecionar, ir para o console. E se apenas escrevermos cifrão, devemos ver algo lá dentro. Devemos ser capazes de pegar o que quisermos. Então podemos pegar todo o nosso corpo e isso nos dá um objeto. E é assim que você sabe, jQuery está instalado. Alternativamente, você sempre pode apenas digitar jQuery. Bem, certifique-se de que você está realmente digitando jQuery e você obter a mesma coisa que aquele cifrão. Uma vez que você tenha jQuery instalado. Vamos para a próxima lição.
34. Alterando o modal usando JavaScript: Certo, vamos dar uma olhada em alternância ou modal. E algumas lições atrás criamos um modal e precisamos basicamente fazê-lo aparecer. Como fazemos isso aparecer? Vamos usar JavaScript para isso. Então, o que podemos fazer, em primeiro lugar, é ir para a nossa, não nossa página inicial, mas são baseados em HTML. E onde quer que digam novos posts, este é um link. E vamos dar a isso uma nova classe de js toggle modal. E vamos abrir o nosso frontend jazz main.js. E vamos apenas rolar para baixo e vamos criar um novo ouvinte de eventos. Então documento, ponto sobre ponto clique ou não ponto clique, basta clicar ponto js, alternar modal. Função E. Para o evento e ponto evitar padrão. Então, se for um link, não vá a lugar nenhum, não faça nada. E vamos apenas dizer console.log. Olá, eu fui clicado. Agora, se você não está familiarizado com jQuery, você sempre pode tomar minha classe jQuery 101 que irá cobrir tudo isso também. Mas por enquanto, eu vou supor que você conhece jQuery neste momento, se você não conhece jQuery, basicamente você está feito este projeto. Há um pouco mais que podemos adicionar, você pode pular em frente onde adicionamos uma visualização detalhada para todos os nossos perfis. Mas se você não conhece jQuery, você não precisa se preocupar com as coisas do Ajax. Então algumas dessas lições você pode simplesmente pular. Então vamos em frente e abrir nosso console. E toda vez que eu clico isso, ele diz que eu fui clicado Olá, eu fui clicado, clica nele 11 vezes. Vou clicar mais 11 vezes. Continua a dizer que fui clicado, por isso está a funcionar. Então o que precisamos fazer agora é precisamos, em nossa modelagem ou ponto base HTML, temos JS modal e precisamos alternar essa classe escondida para ativar e desativar. Então, agora podemos selecionar essa classe modal de alternância oculta. E vamos fazer isso. Vamos ver se isto funciona. Lá vamos nós. Isso funciona. E agora precisamos descobrir como fechar isso para que SVG, precisamos fechá-lo com esse SVG. E poderíamos aplicar a mesma coisa aqui, js toggle modal. E porque tudo o que estamos dizendo aqui é que toda vez que uma classe chamada js toggle modal é clicada, que modal vai alternar essa classe para ligar e desligar. E porque não podemos clicar em mais nada fora daqui, podemos simplesmente clicar nesse x. e agora ele está alternando o suficiente para nós.
35. Recas postagens: Ok, vamos em frente e começar a criar posts dinamicamente com Ajax e jQuery. Então, como pouca referência, Vamos abrir o nosso ponto base HTML. E no nosso modal, esse é o nosso modal aqui, queremos adicionar este formulário Ajax. E então nós realmente não precisamos adicionar um formulário em tudo porque notamos que isso já é alimentado por JavaScript. Não precisamos ter certeza de que ele não está necessariamente pronto para JavaScript, para que
possamos assumir com segurança que todos estão usando JavaScript. Então vamos adicionar uma entrada aqui. Com entrada não, não nenhuma. Vamos fazer uma aula de área de texto. Fronteira a fronteira, azul 500. Acredito que isso vai fazer o que eu quero. E digamos que as linhas serão três linhas. E vai haver alguma margem lá para a margem superior e inferior de seis pixels não são seis pixels. E isso vai ser para REMS para REMS, não me lembro. De qualquer forma vai adicionar alguma margem superior e podemos sempre mudar que se não gostarmos de quatro, podemos sempre usar oito ou 16 ou algo assim. Corte a área de texto. E para JavaScript, e para ser capaz de agarrar isso, precisamos adicionar uma classe base JavaScript. Gosto de prefixar minhas aulas com apenas jazz. Então, JS, novo post. Agora vou chamá-lo de Post. E podemos nos livrar desse afazeres. Ok? Ok. Precisamos adicionar um pouco de Whitman lá. Então, com cheio e isso não fez o que eu quero. Então vamos para o tipo de doc CSS tailwind em largura. E é o W cheio. Por que isso não funcionou comigo? W cheio pode ser o elemento pai. Lá vamos nós. Legal. Então nós temos uma área de texto e lá vamos adicionar um espaço reservado também. Espaço reservado. Digite sua postagem. Vamos também adicionar um maxlength é igual a. E quanto tempo são essas postagens deveria ser. Como um máximo de alimentação modelos 240 caracteres. Então, vamos dizer que isso tem um comprimento máximo de 240 caracteres. Então agora o que acontece quando clicamos neste nada. Precisamos ter certeza de que algo acontece quando clicamos em Criar postagem. Então, quando clicamos criar post, que tem uma classe de JS enviar sobre ele, podemos trabalhar com isso. Podemos dizer documento ponto sobre. E eu só estou mudando isso juntos. Clique em ponto js enviar função e, e ponto previne padrão porque eu não quero que ele faça
qualquer que seja a sua coisa natural está no navegador. E vamos apenas dizer console.log. Submete-me aberto. E aí está, aparece. Submete-me, fixe. Por isso, agora temos de receber esta mensagem. E antes de fazermos um ajax, precisamos fazer, precisamos pegar os textos, OJS, postar textos, isso é o que queremos pegar. Vá em frente e pegue essa mensagem. O Const. O texto é igual a esse elemento texto ponto, note não dot txt, é dot val. E vamos também cortá-lo. Então podemos dizer, se não houver nada lá, se não houver nenhum comprimento de ponto de texto, se não houver nenhum post, simplesmente retorne false. Caso contrário, vamos pegar esse modal e escondê-lo. Então eu vou pegar isso e escondê-lo. Adicionar classe oculta. E isso só vai confirmar que isso realmente vai funcionar para mim. Então nada acontece. Quando eu adicionar algum texto aqui. Fecha para mim. Legal. Mas agora, quando eu abrir, o cilindro do Texas, então precisamos limpar isso. Então eu não vou escrever muito jQuery aqui só porque este não é um módulo jQuery, Jin Django to1 não é destinado a cobrir jQuery muito. E nós estamos apenas indo para soprar através de um monte de isso usando jQuery porque é agradável e rápido. E assim nós também queremos Slashdot post e dar que Val nenhum valor, 123123. E limpa-o formando bom, bom, bom, bom, bom. Isso é exatamente o que queremos. Agora. Precisamos enviar esses dados para algum lugar. E o que eu vou fazer é eu vou colar em algum código aqui e eu vou passar por ele. Só não quero que passe o dia inteiro me observando. Então o que vamos fazer aqui é eu vou colar algumas coisas. E vamos adaptar o nosso código. Então nós escrevemos até aqui, tudo abaixo aqui é novo, é o que eu acabei de colar. Então btn prop desativado. E vamos em frente e bem, em primeiro lugar, leia isso. Isso vai selecionar o botão. Vai desativá-lo, e vai fazer com que o texto diga postagem. Então precisamos selecionar que btn. Então podemos agora dizer constante btn é igual a isso. E esse é o botão JS enviar. Em seguida, vamos para Ajax e postar áreas de texto procurando um URL de postagem de tipo de dados. Vamos fazer isto. Dados. URL do host é igual a um lugar, e vamos ver que isso quebra, mas tudo bem. Podemos mudar isso daqui a pouco. Os dados em si, o texto vai ser texto e tudo bem. E isso só vai tornar isso acessível
no backend para que Python e Django possam dizer, oh, basta olhar para cima, solicita texto de ponto avançado, e vai ser qualquer texto que seja. Então esta é a nossa chave. Este é o nosso valor. On_success. Nós vamos retornar algum HTML. Vamos então pegar aquele modelo JS e vamos adicionar uma classe escondida. Já fizemos isso. Vamos em frente e esconder isso. A área de texto, Val Nada. Podemos substituir isso pelo que escrevemos. E nós vamos dizer postar recipiente acrescentar HTML. Não temos um contentor postal. Então a idéia aqui é fazer isso parecer muito, muito dinâmico. Então, se voltarmos para o nosso HTML aqui, na verdade ele vai estar em nossa página inicial. Todos os nossos posts precisam ser embrulhados nesta coisa chamada Posts container e não precisa ser chamado de posts. Contentor. Pode ser chamado de qualquer coisa. Estou só a chamar-lhe correio contentor. Seja qual for o nome que usares, certifica-te de que é consistente. Então, eu estou usando id postagens contêiner. Você vai querer usar o contêiner de publicações de ID. E isso vai antecipar o HTML, seja lá o que for. Ainda não sabemos o que é isso. No console de erro avisou que havia um erro e, em seguida, altere esse estado do botão de desabilitado para falso. Então não está mais desativado. E mude o texto dentro desse botão para dizer que houve um erro. Isto deve desencadear o erro para nós. Então vamos em frente e dar uma chance a isso. Vamos clicar no novo post. Helloworld e diz que está postando áreas de texto não definidas. A área de texto não está definida e isso é porque não a definimos lá. O que podemos fazer é apenas isso porque esta é a área de texto bem aqui. Então isto vai ter a nossa área de texto. E, em seguida, a propriedade de dados, o atributo de dados, traço de dados, postagem, URL de traço E isso está usando jQuery novamente. Aqui vamos nós, cuco, cuco gol. Então recebemos um erro aqui. E basicamente a porta localhost 8 mil barra local não existe. E isso está pegando daqui de dentro. Então precisamos dar a isso um URL de algum tipo. Então, para onde isto deve ir? Bem, nós temos uma visão já configurada, então vamos em frente e minimizar algumas dessas coisas em nosso feed tais exibições, temos uma visualização Criar nova postagem aqui. Podemos simplesmente dizer, se houver um pedido de post, algo ao longo dessas linhas, post
surdo, auto-pedido, args, retorno. Vamos dizer uma coisa aqui. E isso não vai realmente retornar nada que queremos, não ainda, isso não vai retornar HTML ou qualquer coisa. Este é apenas um exemplo até agora. Mas como podemos usar esse URL, podemos ir para nossos URLs aqui, Criar nova postagem, e podemos usar dois pontos de feed, nova postagem. Então vamos entrar aqui. Vamos adicionar URL, feed dois-pontos, New Post. E isso vai garantir que estamos de fato logins. Então, se eu clicar com o botão direito do mouse em ir para a definição, ele vai certificar-se de que estamos logados com o login necessário mixin. E quando postarmos, vai fazer alguma coisa. Então isso deve quebrar para mim, mas vamos fazer isso como um exemplo de qualquer maneira, este é um pedido de post, fazer, fazer, fazer, fazer, fazer, fazer, fazer. E isto vai passar o meu console no canto inferior esquerdo aqui. Vá em frente e atualize esse mundo de olá e isso não vai funcionar de verdade. Ele foi para um local diferente desta vez eu fui para cortar novo. Isso é exatamente o que armamos. Então vamos verificar esse URL em sua barra URL. É exatamente para onde queríamos que fosse. E aqui está. Este é um pedido pós. Este é um pedido pós. Então sabemos que isso está funcionando. Agora precisamos fazer um pós-processamento aqui. O que podemos fazer para criar um novo objeto post? Então aqui, porque já temos post importado, podemos dizer que o post vai ser post ponto-ponto-ponto objetos, ponto criar. O texto vai ser solicitado texto ponto avançado. Não, isso é errado. Quem pediu o posto avançado ponto receber texto? E o autor vai ser o usuário de ponto de
solicitação porque temos acesso a esse objeto de solicitação aqui. Nós não precisamos usar auto-pedido de ponto. Agora, onde estou recebendo esse texto está em main.js. Não necessariamente este, mas este. É a chave que estamos recebendo e vai chegar a esse valor, qualquer que seja esse valor, aconteceu de ser que eles são nomeados a mesma coisa. Poderíamos nomeá-los de forma diferente, se quiséssemos. E por último, vamos renderizar alguns HTML. Então vamos retornar renderização. Ele sempre leva solicitação como seu primeiro parâmetro. Em seguida, ele precisa tomar uma string como um parâmetro para qual modelo particular queremos usar. Então vamos incluir ou inclui barra post.html. Se formos para inclui barra post.html, queremos renderizar tudo isso aqui. E o que isso vai fazer é usar este bloco pela terceira vez. Então ele vai ser usado na página inicial, vai ser usado na página de detalhes. E daríamos ao Ajax um novo posto aqui? Ele vai aparecer no topo com este estilo exato e tudo mais. Por último, temos de lhe dar algum contexto. Então, esse novo post vai ser post, e esse novo post vem de post.html. Estamos procurando por esse nome aqui. Post. Esse é o contexto em que estamos lançando. E vai coincidir com este novo post aqui em cima. Então vai ter mensagens, data e autor. Agora, em nossa página inicial, também temos show link detalhe é igual a true. Porque estamos na página inicial, queremos passar isso também. Então mostre o link detalhado, vamos tornar isso verdade. Por último, queremos definir que o tipo de conteúdo vai ser Application barra HTML. Não, ainda não importamos renderização. Então precisamos ir em frente e importar renderização. E isso vem de, este é um fácil de lembrar. Atalhos de ponto do Django, importação, renderização. E vamos nos certificar que nosso Django não está reclamando aqui. Ainda não temos reclamações. Ok. Estamos prontos para testar isso? Foi muita coisa para passar. Vamos nos certificar de que isso está funcionando da maneira que esperamos. Caso contrário, vai quebrar. Isto vai quebrar? E se ele quebrar, nós apenas corrigimos todos os bugs um por um como nós normalmente fazemos como desenvolvedores. Olhe para isso, vai esta quebra Read More, vai para a identificação número seis. Eu postei. Eu postei agora mesmo. E isso funciona perfeitamente. Vamos em frente e ter certeza de que podemos fazer isso mais uma vez. Mais uma vez. E vamos abrir isso e ter certeza de que estava tudo fechado e tudo mais. Diz New Post, oh, isso é bom. Coisas boas estão acontecendo. Agora temos um pedido Ajax. Isso é enviar dados para um URL dinâmico. E então vamos repassar isso mais uma vez. Quando alguém clicar em JS enviar, vamos pegar essa mensagem. Vamos nos certificar de que o texto tem um comprimento. Se não houver comprimento, pule. Então vamos pegar aquele botão, que é esse botão em particular, aquele botão em que você clicou. Vamos dizer que está de fato desativado e vamos mudar o texto para postagem. E isso só garante que as pessoas não podem clicar duas vezes. Então armamos para o Ajax. E, na verdade, o ajax já foi configurado para reconhecer que ele precisa procurar um token CSRF. Então não precisamos fazer nada além disso. Vamos dizer que esse tipo é postado. E se entrarmos aqui, que corresponde a postagens surdas, essa URL vai ser js post texto, dados de
ponto, URL de postagem. E isso vai vir do nosso ponto base HTML. Não, sim, é onde está a nossa área de texto. Então JS postar texto, que é nossa classe vai pegar isso. E ele vai pegar dados, postar URL, E nós estamos jogando em um URL do Django. Então é completamente dinâmico. E desta forma não temos que colocar qualquer tipo de URL codificada dentro de nosso JavaScript. Podemos mudá-lo no final do Django. Reimplante seu aplicativo e isso sempre funcionará para nós. Então é este tipo de futuro, tipo de futuro a testar o nosso JavaScript. Então, que tipo de dados estamos enviando para o nosso back-end Python? E nós dissemos para enviar a mensagem. E o texto está vindo do pedido de postdoc obter texto. E o valor do texto vai ser qualquer que seja o nosso post. Após o sucesso, vamos retornar dados HTML, que estão aqui embaixo. Renderizar dados HTML. Na verdade, vamos renderizar o post.html inclui. E nós vamos jogar em alguns contextos postar é postar e mostrar detalhando qs igual a true. E quando isso for sucesso, bem sucedido, JS modal será então escondido. O contêiner de mensagens, que vem da nossa página inicial aqui, post container. Nós vamos antecipar esses dados,
HTML, o que quer que volte do Django, o que quer que volte daqui nós vamos antecipar isso é, vamos colocá-lo no topo da nossa lista. Então vamos dizer que o mesmo botão que colecionamos deficientes vai ser falso. Então é clicável de novo e vamos apenas dizer New Post. E então nós vamos pegar aquele JS pós-imposto que a área de texto e nós vamos esvaziá-la para que alguém possa fazer outro post imediatamente e não
parece que eles são dados antigos ainda persistindo por aí. Em caso de erro. Vamos avisar o erro do console. E vamos dizer que o botão que clicamos vai ser desativado. Não, não vai mais ser desativado. E esse texto simplesmente vai dizer erro. E isso é tudo o que precisamos fazer. Agora, se você não está super familiarizado com jQuery ou JavaScript, tudo bem. Você sempre pode baixar o código-fonte e se divertir com isso. Você não precisa necessariamente saber todo esse código, mas sinta-se livre para explorar e fazer o que quiser. E honestamente você pode quebrar totalmente este código e apenas ler baixado mais tarde e ele vai funcionar para você.
36. Visão de detalhes do perfil: Tudo bem, vamos em frente e adicionar uma visão detalhada do perfil. Primeiro precisamos abrir nossos perfis, URLs de perfil. Oh, olhe para isso. Nós não temos isso. Então vamos para o nosso aplicativo de perfil e criar um novo arquivo chamado URLs dot py. E aqui precisamos do Django dot URLs,
importar caminho, e de, a partir de pontos
de vista de importação. Porque vamos usar isso em um segundo. Queremos nos dar um nome de aplicativo de perfis. Isso vai nos ajudar com namespace e na estrada. Padrões de URL vai ser um caminho. E isso vai enviar o usuário para o meu website.com barra perfil. Vamos pegar uma string e esse será o nome de usuário. É assim que vamos chamá-lo, é nome de usuário. E quando o usamos em nossa visão. E vamos fazer esta renderização vistas ponto perfil, vista de
detalhes que ainda não temos. Mas está tudo bem. Faremos isso em um momento. E o nome vai ser detalhe. E observe como temos esse detalhe
padrão chamado recorrente aqui temos detalhes de postagem também. Mas nossas postagens é chamado de detalhe do feed e nossos perfis vai ser chamado de detalhes de perfis. Tudo bem, vamos salvar isso e assistir Django reclamou que não há um arquivo aqui chamado de visão detalhada do perfil. Na verdade, sim, não vai reclamar porque ainda não sabe. Então vamos para o nosso arquivo de URLs principal aqui. E vamos fazer a partir de perfis importar URLs como perfis URLs. E vamos basicamente copiar nosso caminho aqui. E vamos usar perfis, URLs, e esse namespace vai ser perfis. Agora o que podemos fazer é dizer perfil com uma barra. Vem cá acima e livra-te disto. E isso não vai ser necessário porque ele vai prefixá-lo com perfil de qualquer maneira. E então ele vai ser sua barra website.com, barra perfil e, em seguida, o nome de usuário dessa pessoa. Então agora podemos ver que o Django reconheceu que ele está reclamando que não há nenhuma visão detalhada do perfil. Então vamos passar para as nossas opiniões. E precisamos criar essa exibição de detalhes do perfil. Então vamos nos livrar disso porque vamos estar usando visão baseada em classe. Então podemos fazer a partir de Django.com trip dot auth dot modelos importar usuário. Já fizemos isso antes a partir de pontos de vista Django, ponto genérico, importar uma visão detalhada. E então precisamos criar uma classe aqui chamada
vista de detalhes do perfil porque era isso que a URL estava procurando em nossos padrões de URL. E isso vai ser uma visão detalhada. Agora vamos dizer nomes de métodos HTTP é igual a obter. Eu só gosto de colocar isso lá dentro sabendo que se alguém vai ler isso, que eles não deveriam estar aceitando qualquer tipo de post,
colocar ou excluir ou qualquer tipo de visão. É literalmente apenas um pedido de obtenção. O nome do modelo vai ser Perfis barra HTML ponto detalhado. E nosso modelo será um usuário. Então temos o nosso nome de objeto de contexto. Eu tendem a sempre definir isso para que não seja apenas objeto em nosso modelo porque em nosso modelo seria parecido com este objeto dot nome de usuário. Em vez disso, o que eu gosto de fazer é definir isso como algo um pouco mais útil. Ele vai chamar este usuário. E em nosso modelo poderíamos usar usuário dot nome de usuário em vez disso. Só faça um pouco mais de sentido quando estiver lendo o código. Por fim, precisamos de um campo slug é igual ao nome de usuário. E o argumento de palavra-chave slug URL adquirido será nome de usuário. E então esse é o campo lesma é como vamos procurar esse usuário por quê? Slog? E vamos dizer olhe, procure o usuário pelo nome de usuário. E isso é led URL palavra-chave arg, o quark vai vir a partir daqui, nome de usuário. Então estamos dizendo isso como aceita uma string e vai ser um nome de usuário. E esse será o nosso argumento de palavra-chave. Então esse argumento de palavra-chave pode ser passado aqui. Podemos encontrar um usuário assim. Agora não precisamos escrever para todos os tipos de consultas ORM, consultas gerenciamento relacional de
objeto. Não precisamos procurar um usuário manualmente. Isso só vai fazer isso por nós. Então vamos abrir post.html. E isso é, nós não precisamos mais disso, enquanto nosso To Do, nós precisamos criar um novo URL aqui. Então abra nossa sintaxe. Perfis de URL era o namespace que usamos. Então vamos usar isso em uma corda. Usamos detalhes de perfis. E isso aceita o que como parâmetro, uma string. Então, podemos simplesmente colocar post dot autor dot nome de usuário. E isso vai agir como nossa corda para ir em frente e salvar isso. E vamos atualizar nossa página e ver se há algum erro ou reclamação. E isso vai para a porta localhost 8 mil e ver isso
no canto inferior esquerdo, barra, barra de perfil. Caleb, se
formos aqui, veremos que o modelo não existe. Mas isso é bom o suficiente. Isto funciona para nós. Na próxima lição, vamos em frente e criar um novo modelo de perfil.
37. Modelo de detalhes do perfil: Ok, na última lição nós criamos uma visão detalhada do perfil. E nós dissemos usar um modelo chamado Perfis barra detalhes. Então, se formos para perfis, vamos criar uma nova pasta aqui chamada modelos de perfis de barra. Isso vai ser o nosso espaçamento de nomes para o nosso modelo e, em seguida, detalhado ponto HTML. E vamos chamar essa visão detalhada aqui apenas para ter certeza de que isso está funcionando,
que, que não há nenhum erro de digitação. E então vamos voltar aqui. E se eu clicar no meu rosto animado, ele diz perfis, ponto detalhado HTML não existe. Então uma de duas coisas aconteceu aqui. Ou eu tenho um modelo e não um modelo, mas eu tenho um erro de digitação em algum lugar. Vamos verificar novamente os perfis. - Sim. Corte detalhe e isso parece bem. A segunda coisa é que o Django pode simplesmente não saber sobre isso. Pode ter de ser reiniciado. Vamos tentar isto. E, de fato, Django só precisava ser reiniciado, era só isso. Então vamos em frente e começar a editar isso. Vamos dizer que isso se estende a partir de ponto base HTML. O título do bloco vai ser usuário. E estou a perceber isso do nosso contexto. Nome do objeto, usuário. Esse nome de usuário. E o corpo do bloco vai ter algumas coisas aqui. Vamos nos certificar de que isso funciona também. Cuckoo, isso tudo está funcionando e tem algumas coisas aqui, diz Caleb lá em cima. Isto está a parecer bom. Eu tenho um outro componente. Eu quero usar um componente de vento de cauda, e é este aqui. Então vamos em frente e olhar para o código-fonte. E sim, isto é o que eu quero. Então vamos em frente e selecionar tudo isso e copiá-lo. E eu vou colar isso aqui. E legal, temos um nome de perfil. Então vamos em frente e, e começar a editar como algumas das coisas que podemos jogar em uma imagem. Podemos colocar em um nome ou um nome de usuário, número de posts, número de seguidores. E podemos nos livrar disso. E não vamos fazer muito com isso. Não vamos estender tudo isso, mas se você quiser,
você poderia adicionar como uma foto de fundo e deixar os usuários mudarem suas fotos e coisas assim. Então, em vez de uma Livia Dunham, digamos usuário ponto, nome de usuário. Vamos nos livrar dessa. Legal, legal. Digamos quantas postagens este usuário tem? X, X, e vamos adicionar um item a fazer. Adicione o total de publicações. E vamos procurar seguidores que ainda não criamos nenhum seguidores, mas vamos fazer em apenas um pouco para fazer adicionar seguidores totais. Bom o suficiente. Agora precisamos ir e adicionar essa imagem lá dentro. E o que podemos fazer é fazer referência a outra página inicial, butter post.html. Então sabemos que precisamos carregar nossa miniatura e sabemos que ela vai ficar assim. Então, honestamente, vou copiar isto. Carregue a miniatura ali. E onde está essa imagem? Essa imagem vai estar bem aqui. E acabei de colar isso da minha prancheta. E assim isso não vai ser postado. Todos criaram uma imagem de perfil. Este vai ser o perfil de ponto do usuário, imagem de
ponto e não está procurando 372 por 372 Na verdade, isso não está certo. Isso deveria ser 373 por três 73. Você pode muito bem consertar isso enquanto estamos nisso. E quão grande é essa imagem, nós realmente não sabemos. Então, digamos, vamos fazer um 200 por 200. Vamos ver se isso funciona. E ele não move a imagem original para cima e simplesmente substitui a URL. E eu acabei de excluir o antigo,
aquele que eu originalmente colado no URL ponto IM. Ok, nada mal, nada mau. Meu rosto está um pouco ali. Vamos tentar 100 por 100. Isso é melhor. E agora, quando alguém faz um post como este gene, realmente ver seu perfil. Agora, novamente, você pode estender isso o quanto quiser. Você pode adicionar uma nova imagem de fundo e lá você pode deixá-los mudar sua imagem de fundo, todos os tipos de coisas. A única outra coisa que realmente vamos fazer
neste curso em particular é que vamos adicionar número de posts,
número de seguidores, e então ser capaz de realmente seguir e deixar de seguir as pessoas. Então, em seguida, vamos adicionar o número total de postagens a isso.
38. Postagens totais: Tudo bem, então se dermos uma olhada aqui na nossa página de perfil, ela diz “Ex Post” e “Ex-seguidores”. O que eu vou fazer é mostrar a vocês como adicionar X posts. E vou deixar aqui uma coisa a fazer para que possas adicionar o teu número de seguidores. Então vamos em frente e abrir nosso editor. E onde diz x posts, precisamos colocar o número total de posts lá. Então vamos fazer isso. Total de posts, vamos nos preparar para o sucesso. Vamos escrever um total de posts lá, mas agora precisamos adicionar isso porque se atualizarmos, não vai dizer nada. Então, o que podemos fazer é em nossa visão, em nossos perfis barra views dot py arquivo. E podemos dizer def, dados GetContext. Auto-financiar qualquer tipo de args palavras-chave em um pode tomar. Vamos pegar o contexto. Então vamos dizer super dot dados GetContext, passando em qualquer tipo de quarks que possam ter sido passados para nós e retornar contexto agora para obter algo que possamos dizer ou não obter algo, mas para adicionar algo ao nosso template, para adicionar alguns novos contextos ou um modelo podemos dizer contexto. E o que chamamos a isto? Chamamos de “Total Posts”. Total de mensagens é igual a, Uau, olá. E é isso. É tudo o que vamos fazer. Aguarde até que o Django reinicie. Virar, e ele vai dizer, Uau, mensagens de olá. Agora isso está funcionando. Isso está recebendo algo do back-end, mas não é realmente dinâmico. Vamos torná-lo dinâmico por glutão, coletando o número de postagens. Então precisamos importar isso de modelos Fi dot, post de importação. E então podemos dizer postar pontos objetos, filtro de
pontos pelo autor. O autor vai ser quem quer que este usuário em particular seja. Contagem de pontos. Não, não sabemos quem é esse usuário porque o usuário é uma variável não atribuída neste método agora. Então vamos em frente e criar essa variável de usuário que simplesmente vai vir de self.age, get object. E assim, se eu posso soletrar isso direito, get objeto vai obter este objeto de usuário. Então ele vai olhar para cima, um usuário vai
procurá-lo, é nome de usuário e ele vai combiná-lo com o nome de usuário que está na URL. Se ele encontrar um usuário, que os usuários, em seguida, vai ser, por exemplo, Caleb ou teste ou você, ou seu professor, ou uma cadeira, se você quiser, ou algum tipo de conta meme. E então o que estamos dizendo aqui é todas as postagens, todos os objetos de postagem, filtrá-los pelo autor, certifica-se de que o autor é quem este usuário atual está em sua página de perfil, e depois contar todas essas postagens. E vamos refrescar. E eu tenho seis postagens. Isso está correto? 123456. Na verdade, tenho seis postagens e é assim que acrescentamos isso aí. Agora, o que eu vou fazer é deixar você descobrir como adicionar seguidores lá dentro. Agora não temos um aplicativo de seguidores ainda, então você não precisa fazer isso agora, mas eu vou adicionar um item a fazer aqui, total de seguidores. E você vai ter que descobrir como adicionar os seguidores lá dentro. Vou adicionar um item a fazer aqui para adicionar seguidores que já têm isso aí. Então vou deixar isso para você.
39. Como adicionar um botão de seguimento: Certo, vamos nos preparar para começar a seguir as pessoas. Então o que queremos fazer aqui é que precisamos de algum tipo de botão de seguir agora não há ação. Você pode ver a conta de alguém, mas não pode realmente segui-la. Então vamos em frente e adicionar um botão de acompanhamento. Logo abaixo de onde diz Caleb, ou seja qual for o nome de usuário, seu nome de usuário será diferente. Vou adicionar um pequeno botão. E assim eu abro detalhes de perfis. E procuro o meu nome de utilizador aqui. E vou colar um botão. E este botão, nós já vimos este botão antes. Este botão eu vou te mostrar. Parece muito com aquele botão, não é? Então tudo o que fiz foi copiar isso. E o que eu quero fazer aqui é ter certeza de que eu tenho algum JavaScript anexado a ele. Então o tipo não vai ser Enviar, o tipo é simplesmente vai ser um botão. E, na verdade, não precisa ser um botão. Pode ser um URL ou não um URL, mas um, uma tag também. Então, uma etiqueta âncora se você quiser usar um botão. E eu vou dizer que isso é chamado de “JS Segue”. E precisamos descobrir quem isso vai seguir. Assim, dados, o nome de usuário é igual ao usuário dot nome de usuário. E isso vai permitir que nosso JavaScript descubra quem é esse usuário. E poderíamos usar um ID de usuário se quiséssemos ou usar um nome. Realmente não importa, apenas uma maneira única de procurar o usuário. E eu vou definir este texto aqui para JS seguir o texto. E novamente, estamos apenas nos configurando para futuros seletores de poço JavaScript. Então, podemos selecionar esse nó específico ou podemos selecionar esse nó específico e podemos ter certeza de que algo realmente acontece. Vamos em frente e vamos nos certificar de que isso não apareça. O usuário não está conectado. Então, se o usuário de solicitação é autenticado, então eles podem ver este botão. Caso contrário, digamos classe de margem, top três, note que fiz isso errado. Ponto m t traço três. Faça login para seguir este usuário. Senão e acabe com isso. Lá vamos nós. Certo, parece que não fez nada. Isso é bom. Vamos abrir um novo login de navegação privada para seguir este usuário que o texto é um pouco grande demais. Podemos fazer esse texto menor? Texto? Pequeno? Sim, parece um pouco melhor. E porque estou logado aqui, já
posso fazer isso agora. Não quero ser capaz de me seguir. Então vamos embrulhar isso em mais uma declaração se também. Então o que podemos fazer aqui é se você estiver logado, sim, ótimo. Você precisa ser capaz de verificar para ver se você está comparando contra si mesmo. Então, digamos que se o usuário do ponto de solicitação não é o usuário atual, isso de outra forma não vai mostrar nada. Lá vamos nós. Isso não funciona. Ou melhor, não é suposto funcionar, mas não aparece para mim. Vou ver a conta de teste e ver se consigo seguir a conta de teste. Posso seguir a conta de teste. Legal, legal, legal. Mas eu não tenho permissão para seguir a mim mesmo. Isso é uma boa notícia. Nós não queremos ser capazes de seguir a nós mesmos porque então nossos recursos podem estar cheios de nossas próprias coisas. De qualquer forma.
40. O aplicativo seguidor: Certo, estamos falando de seguidores. Precisamos seguir as pessoas e rastrear quem está seguindo quem. Então vamos em frente e criar um novo aplicativo chamado seguidores. Então, no meu terminal aqui, eu vou digitar Python gerenciado i pi, iniciar seguidores de aplicativos. E à minha esquerda você vai ver uma nova pasta chamada seguidores. Vamos entrar em nossas Configurações dot pi e nossos aplicativos instalados. E vamos adicionar seguidores aqui em algum lugar. Não importa onde neste ponto chamado seguidores, Django vai reiniciar. Tudo parece bem. Vamos abrir nossos seguidores e vamos para model.predict. E vamos criar nosso novo modelo aqui. Então vamos chamar isso de um seguidor classe seguir ou é um modelo de ponto, modelo, mongulose.model, modelo. Maneira interessante de dizer isso. E então temos seguido por é igual a modelos de ponto estrangeiro, chave, usuário. Ao excluir. Ainda não importamos usuário, mas tudo bem. Modelos ponto cascata. Então, sempre que o usuário seguido for excluído, vamos excluir esse relacionamento. E vamos dar um nome relacionado. Nome relacionado vai ser seguido por porque na verdade eu vou comentar isso. Vou te mostrar por que precisamos fazer isso em um segundo. Então precisamos ver quem essa pessoa está seguindo é igual a dois modelos, ponto chave estrangeira. Isso também vai ser um usuário em excluir é igual dois modelos de ponto cascatas. Então, quando excluímos esse usuário em particular, ele também vai excluir esse relacionamento. Portanto, se você excluir a conta que você está seguindo ou essa pessoa excluir sua própria conta
, ela excluirá esse relacionamento. Caso contrário, se a pessoa que está seguindo você e excluir sua conta também excluirá esse relacionamento. Então isso é seguido por dois relacionamentos seguintes. Vamos dar a isso uma string def, então ele tem uma representação de string, retornar algum tipo de F String que podemos fazer self.view seguido por DID qualquer que ID de usuário
é, está seguindo self.age, seguindo id dot. E vamos também nos dar um meta de classe. E vamos dizer que o único juntos vai ser seguido por e seguir. Então isso vai criar um índice único. Então você pode ver se alguém está seguindo você, se você está seguindo ele, e que só pode haver um. Para que você não possa seguir as pessoas uma e outra vez e outra e outra vez. E vamos apenas ter certeza de que isso é uma tupla ou uma tupla. Eu não sei. Às vezes esta tupla, às vezes é tupla. Sim. Ok. Nome de usuário não está definido. Vamos voltar a partir do Django dot contract, dot auth dot dot models import user. E vamos dar uma olhada no que isso está dizendo aqui. Vamos fazer isso de novo. E diz, e é por isso que vamos adicionar nomes relacionados aqui. Ele diz seguido de confrontos com acessor reverso para seguidor seguinte. Então estes são basicamente conflitantes na terra da magia do Django. O que podemos fazer para evitar isso, se você vir algo assim é que podemos simplesmente dar um nome relacionado a
este e daremos a este um nome relacionado. E vamos chamá-lo de seguir e seguidores que são seguidos por e seguindo. E esse erro desaparece. Em seguida, precisamos fazer migrações e também precisamos soletrar isso corretamente. E depois migre. Legal. Então temos isso lá dentro. Vamos também registrar isso com o nosso administrador. Já fizemos isso antes. E então vamos para o nosso feed. Vamos copiar o administrador. Seguidores vão ao nosso administrador aqui, colam isso ali. E em vez de importar de modelos e obter post, queremos obter seguidor. Isso é o que chamamos de modelo aqui, seguidor. E vamos selecionar tudo isso. O Django deve reiniciar e não deve haver problemas. Agora vamos voltar para o nosso administrador e vamos ser capazes de ver que temos um novo aplicativo aqui chamado seguidores e não há ninguém seguindo ninguém. E posso escolher Caleb para seguir Test. Salve e adicione outro. Vamos tentar isto. Caleb vai seguir o teste de novo e salvar. E ele diz, seguidor com isso seguido por em seguir já existe. Então só um pode existir. E isso é uma restrição única em nosso banco de dados. E Django vai impor isso para nós. Então, neste momento, você deve ter um aplicativo Django seguidor.
41. Seguir e unfollowing: Certo, precisamos de uma maneira de seguir e deixar de seguir um usuário. Então, se abrirmos nosso aplicativo, posso seguir essa conta de teste. Mas quando eu clicar, não faz nada. Então precisamos disso para fazer alguma coisa. Precisamos de algum tipo de interatividade. Então precisamos de Ajax esses dados de e para os servidores. Precisamos enviar dados para o servidor e aceitar dados do servidor e mudar a palavra siga dois seguindo ou deixar de seguir ou qualquer coisa assim. Também podemos querer mudar o número de seguidores lá dentro. Então eu vou deixar isso com você porque eu não fiz isso
propositalmente. Vou deixar isso com você. Mas se você quiser em JavaScript, você pode atualizar dinamicamente também. E depois que terminarmos com isso, vamos mudar nossa página inicial para ter certeza de que estamos mostrando apenas posts relevantes para nós de pessoas que estamos seguindo. Então vamos em frente e trabalhar nisso. Temos que abrir o perfil detalhado ponto HTML. E temos este JS a seguir. E então queríamos escrever um pouco de JavaScript com isso. Então vamos para o nosso front-end, main.js, e vamos adicionar outro ouvinte de eventos aqui. Então, sempre que você clicar nessa função, E ponto impede o padrão. E isso só vai impedir que um link vá a qualquer lugar ou um botão envie um formulário console.log clicado. E só queremos ter a certeza de que isto funciona. Legal. Clicou. E vamos em frente e coletar alguns dados também. Então precisamos, o que posso fazer é dividir isso. Não, isso é muito lotado. Certo, vamos dividir isso. Então, em nosso layout.html detalhado, sempre que você clicar em seguir, Há um nome de usuário e deve haver algum tipo de ação. Então podemos fazer dados Ação é igual a seguir ou deixar de seguir. Isso é o que vai ser. Vamos em frente e pegar esse nome de usuário e vamos fazer essa ação. E também precisávamos de URL de dados em algum lugar para realmente Ajax é dados de porta em vez. E então isso vai ser URL. Perfis. Seguir. E nós vamos dizer ponto de usuário, nome de usuário. Agora isso não vai existir. Então, quando carregarmos nosso modelo, isso vai nos dar um erro. Assim, inverter para seguir não encontrado. E assim como todas as coisas do Django, nós meio que precisamos fazer várias coisas ao mesmo tempo. E então ele está indo para nossos perfis e ele está indo para nossos URLs. Vamos apenas copiar isso e colocar siga no final e exibição de detalhes do perfil. Vamos seguir a vista. Agora essa visão de seguir não existe. Então vamos entrar em nossa URL ou nossa porca de visualizações ou URLs. A menos que você classe siga a vista. E não queremos que isto seja algo especial. Só queremos que seja uma visão regular. Mas também precisamos ter certeza de que este é o login, que o login do usuário. Então. Login visualização necessária e eu não acredito que está no seu ainda. Então, onde colocamos isso? Visualizações de feed? Nós rolamos até aqui, podemos ir até aqui. Vou literalmente copiar e colar essa cópia colar. E em vez de vista detalhada, vamos adicionar uma vista aqui. E por último, mas não menos importante, Python não gosta de linhas vazias. Diz login necessária vista fora nozes, porque não é uma visão, é um mixin. Lá vamos nós. Django não está mais reclamando. Então, primeiro as coisas, o que precisamos fazer é ter certeza de que um nosso modelo é carregado. Vamos atualizar este modelo ainda não é carregado. Pergunto-me por que não está fazendo isso? Porque não lhe chamei a coisa certa. Copiei e colei. Isso foi uma cópia passada um problema. Quando copiar e colar, não faça o que eu faço. Certifique-se sempre de ler tudo o que copiou e colou. Ok, vamos ter certeza que isso funciona. Vamos inspecionar isso e ver o que temos aqui. Temos um botão com um URL de dados, um nome de usuário de dados reais. E sabemos que quando clicarmos, ele será clicado. Então agora precisamos fazer alguma coisa. Precisamos coletar alguns dados aqui. Então vamos voltar para, eu vou fechar alguns destes em nosso main.js e onde temos este arquivo ajax. O que eu vou fazer é copiar tudo isso. Boom. E vamos escrever um ano muito, muito simples. Nós não vamos fazer um monte de processamento ou validação JavaScript em vez disso. Então, que tipo de dados queremos enviar? Queremos enviar, a ação vai ser algum tipo de ação. Então, porque está neste botão JS seguir, que é bem ali, é uma propriedade aqui. Podemos dizer isso,
este ATTR, Ação de dados. E a razão pela qual estou usando a ação de dados em vez de dados de ponto. E então apenas colocando ação lá dentro. Vou te mostrar que há duas maneiras diferentes de escrever isso. A ação de dados será descontada. Isto não vai funcionar para si se o mudarmos no futuro, que vamos fazer. Considerando ATTR, ação de dados de atributo não vai ser armazenado em cache e ele vai procurá-lo cada vez. Então isso é apenas uma boa maneira de contornar isso, esse problema de cache. Precisamos verificar um nome de usuário. Então nome de usuário vai ser este nome de usuário de dados de ponto, ou podemos usar dados aqui porque ele não vai ser um problema se ele é armazenado em cache, este nome de usuário nunca vai ser alterado. Considerando que a ação aqui mudará de seguir para deixar de seguir, para seguir para deixar de seguir. Mas o nome de usuário nunca vai mudar. O nome de usuário será o mesmo em todas as exibições de detalhes do perfil. Por último, precisamos da URL de dados, e isso virá do Django. Isso vai ser renderizado modelo interno direito. E vamos nos certificar de que o JavaScript é dinâmico. E então nós vamos mudar este URL para este URL de dados ponto. Isso é o que eu chamo, URL certo. Sim. E vamos nos certificar de que há uma vírgula depois disso. Então, basicamente, vamos dizer, vá para este URL onde quer que seja. E nós poderíamos mudar isso no backend do Django e JavaScript não será carregado no futuro. A ação vai ser seguir ou deixar de seguir. O nome de usuário será qualquer que seja o nome de usuário nessa página. E vamos nos livrar dessas coisas porque não precisamos disso. E nós vamos apenas manter isso agradável e simples. Este não vai retornar dados, dados HTML. Este vai retornar apenas dados regulares na forma de JSON como normalmente esperamos um, um, um, um, um, um pedido ajax. Certo, então vamos salvar isso. E vamos ver o que acontece aqui. Vamos clicar nele. E obtemos um método 405 não permitido. Legal. Então isso significa que podemos realmente fazer algo com isso. Isso significa que nosso endpoint está funcionando. Então, vamos voltar para onde estão nossos comentários não no feed. Não estamos em visualizações de perfil front-end, nomes de métodos HTTP. E vamos dizer que o único nome de método que é permitido aqui é postar. Vamos tentar de novo. E desta vez temos um método que não é permitido também. Isso é realmente OK. Eu acho que o que estamos procurando aqui é, se bem me lembro, auto-pedido pós
surdos, args e quarks. E só queremos devolver algo aqui. Então vamos retornar uma resposta JSON de w1 é igual a true. E precisamos importar essa resposta JSON do Django dot HTTP import resposta JSON. Ok, vamos tentar isso. Está bem, parece que está a fazer tudo o que está ligado ao XHR aqui. Agora olhe para isso. Estamos chegando a centenas agora, isso é bom, e cada vez que clicamos estamos recebendo 200. Então o que queremos fazer aqui é dizer que dados são iguais a pedido e ponto pós-doc. Porque gosto de trabalhar com dicionários. Então podemos dizer se a ação não nos dados ou nome de usuário não nos dados, retornar uma resposta HTTP, solicitação ruim. Vou copiar isso para não ter que digitar tudo isso 300 vezes o recurso. E eu estou facilmente faltando dados, e isso vem de HTTP também. E então o que isso vai dizer é que se alguém tentar acessar este URL, mesmo que ele esteja logado, ele vai estar procurando por uma ação e um nome de usuário. E então, se eles estão perdendo isso, eles vão ter uma resposta ruim. Agora vamos em frente e tentar encontrar esse usuário. Então vamos tentar. O outro usuário. É igual ao usuário dot objetos dot get, e então o nome de usuário vai ser nome de usuário de dados. E isso vem do nosso ajax solicitado objeto de dados é o nosso pedido ajax, e este é o nome de usuário em nosso objeto de usuário. É importado pelo usuário. Na verdade, é, isso é uma boa notícia. E isso é exceto isso. Se o usuário não existir. Então, se alguém está tentando ser malicioso e está sendo muito bom em ser malicioso. Digamos que o usuário não existe exceção e retornar uma resposta HTTP, solicitação
incorreta e usuário ausente. Ou podemos 404 ou o que quiser fazer lá. Então agora podemos dizer se a ação de dados é igual a seguir, senão, deixar de seguir. E eu gosto de deixar pequenos comentários aqui para que as pessoas saibam o que estou fazendo quando lêem o código-fonte. E então a ideia aqui é que você deve seguir alguém. Vamos, vamos fazer um get ou criar. Então podemos dizer o seguidor e criado porque isso não vai voltar. Uma tupla é igual a objetos de ponto seguidor, ponto, obter ou criar. E nós vamos dizer, seguido por é igual ao seu usuário quest dot. E a seguir está o outro usuário. E os outros usuários vindo daqui de cima. E eu, pessoalmente, estou fazendo esse pedido para seguir alguém. Então eu vou dizer que essa pessoa é seguida por mim ou pelo pedido que o usuário. Foi assim que consegui essa lógica. É um pouco confuso no começo, mas faz mais sentido quando você trabalha com ele um pouco aqui e ali. Caso contrário, queremos deixar de seguir essa pessoa. Então follower é igual a follower dot objetos ponto get seguido por é igual a solicitar usuário ponto, e seguinte é igual ao outro usuário. Então vamos ver se conseguimos pegar essa pessoa. Vamos tentar isso, porque esse seguinte pode não existir. Por isso, temos de aceitar isso. E podemos dizer, seguidor não existe. Passar. Ou podemos dizer que seguidor é igual a Nenhum. E então aqui embaixo podemos dizer, se houve um seguidor que foi encontrado, seguidor ponto excluir. Em seguida, em nossa resposta JSON podemos dizer feito é verdade ou geralmente sucesso verdadeiro ou algo assim. E então podemos dizer, queremos retornar algumas palavras. As palavras não serão seguidas. E esta vai ser a formulação que vamos colocar de volta no DOM. Então deixe de seguir, se a ação de dados é igual a seguir e esta é uma declaração ternária em Python. Senão sigam. Então, se alguém está seguindo alguém, vamos retornar o texto deixando de seguir. Caso contrário, se alguém tiver deixado de seguir, alguém, devolva a palavra, siga. E eu vou mostrar a vocês como é isso aqui. Podemos fazer
dados console.log e obtemos um erro interno do servidor. Ok, vamos ver que tipo de erro temos. Seguidores não definidos. Oh, sim, isso faz sentido. E nós vamos ter que ir e importar isso de seguidores modelos
ponto importar seguidor. Isso é refrescar. Para ir em frente e seguir. E ele diz, sucesso com as palavras verdadeiras deixam de ser seguidas. Agora, vamos falar com os nossos seguidores aqui. Um está seguindo dois, eu pessoalmente, Caleb, teste M1 é dois. Podemos ver isso no Caleb e testar. Vamos apagar isto. Apenas certifique-se de que isso está funcionando. Vamos clicar novamente, atualizar nosso administrador. Lá está ele. Agora precisamos trocar isso. Então, se alguém está sendo seguido, você precisa deixar de segui-lo e se alguém não está sendo seguido ou não está sendo válido, você precisa ser capaz de segui-lo novamente. Então vamos para o nosso ponto principal js aqui e nosso botão. Podemos dizer que este 0.2x vai ser texto de ponto de dados. Vamos ver o que isso parece agora, quando eu atualizar este deixar de seguir e oh, isso realmente mudou para muito do que eu quero. Ainda quero aquele botão e tudo mais. Eu quero que JS siga o texto para mudar, mas eu quero que o SVG para ficar lá. Então não vamos fazer isso, mas vamos selecionar esse nó específico. Lá vamos nós, deixando de seguir. Também precisamos mudar essa ação e essa ação, onde você está seguindo, precisa ser deixada de seguir. Então o que podemos dizer aqui é, se a ação é igual a seguir, mudar o texto para deixar de seguir, senão, o oposto. E assim poderíamos dizer isso porque não estamos usando funções aqui onde estamos usando funções de seta. Então não estamos usando funções com a palavra-chave this. Estamos realmente enganando jQuery um pouco aqui. Podemos continuar usando isso em referência a JS, siga este ponto ATTR. A ação de dados vai deixar de ser seguida. Caso contrário, vai ser. E vamos nos certificar de que isso funciona. Então temos teste de nome de usuário. As ações de dados devem ser seguidas e deixadas de seguir aqui, vamos em frente e clicar nele. E não está fazendo o que eu esperava fazer. Por que está fazendo isso? Vamos depurar este console. Log de pontos, depuração. Deixar de seguir. Seguir. A ação não está definida. E isso é porque eu coloquei aqui, transforme-os em uma variável. Lá vamos nós. A ação constante é igual a
qualquer que seja a ação é realmente igual a ação. E então podemos dizer se essa ação é igual a seguir yada, yada. Ok, vamos ver se isso funciona agora e isso deve funcionar melhor. Lá vamos nós. Ele muda de seguir para deixar de seguir. Agora, uma última coisa que precisamos fazer, e vamos fazer isso na próxima lição, é precisamos ver se estou seguindo alguém. Preciso mudar esse botão e essa ação padrão de seguir para deixar de seguir. Vamos fazer isso na próxima lição.
42. Siga dinâmico e unfollow: Já precisamos ver se alguém está seguindo alguém ou não. Então, se eu fizer isso, vá para os seguidores. Legal, legal. Então ele diz que eu estou seguindo o que eu atualizar esta página. Não diz que estou a segui-los. Ele quer que eu os siga. Está me motivando a seguir alguém e isso precisa ser o oposto. E então o que precisamos fazer é entrar em nosso uso dot pi e nossa visão de detalhes do perfil. Precisamos adicionar algum contexto aqui. Então, precisamos dizer se solicitação dot user_data é autenticado, o contexto de você segue é igual a objetos de ponto seguidor, filtro de
ponto. E quem estou seguindo? Este usuário em particular, que temos configurado aqui, usuários iguais a self.age SetObject. E seguido por é igual a mim mesmo, solicitar usuário ponto. E então só precisamos ver se isso existe. Isto existe? E isso em vez de dizer filtro e poderia possivelmente obter várias linhas, ele simplesmente vai dizer que não existe sim ou não, e ele vai retornar verdadeiro ou falso. Agora aqui está a coisa, o usuário do ponto de solicitação não existe. Nós não temos solicitações em obter dados de contexto, então precisamos adicionar isso em nosso despacho. Então despacho surdo, auto-solicitação, args, quarks, e retornam super ponto despacho args e quarks. E tudo o que queremos fazer aqui é um pedido de auto-idade é igual a esse objeto de solicitação. E agora, em vez de dizer solicitação aqui, podemos dizer se auto-ponto solicitação, que o usuário é autenticado e podemos fazer a mesma coisa aqui. Se houver ponto de usuário de solicitação autodidata, digamos que você siga. Agora em nossa visão detalhada, podemos dizer devido a, devido a, devido a devido. Podemos mudar o texto aqui. Dê-nos algum espaço para trabalhar dentro do espaço. Se seguirem, deixem de seguir, senão sigam. E se e vamos ver se isso funciona. Eles são reais. Estou seguindo essa pessoa? Estou seguindo essa pessoa. Agora quer que eu deixe de seguir. Sabemos que há mais uma coisa que precisamos fazer aqui é mudar como ação. E assim podemos dizer se a seguir, não, se você seguir em vez, vamos apenas prefixos com a palavra ligada. E se assim for, ou vai ser seguido ou deixar de seguir. Isso é deixar de seguir e deletar. E vemos que o seguinte foi excluído. E se eu voltar e seguir novamente e apenas atualizar meu administrador, ele aparece em mais um exemplo,
deixar de seguir, e ele vai embora. Simplesmente assim. Agora temos um seguinte. Podemos seguir várias pessoas. Agora, o problema é que se eu seguir essa pessoa e voltar aqui, ele ainda é apenas aparecer quaisquer mensagens que estão aqui, nós precisamos mudar, isso. Precisamos realmente ir lá e modificar as postagens que estamos vendo. E vamos fazer isso na próxima lição.
43. Postagens dinâmicas de HomePage dinâmico: Tudo bem, estamos chegando ao fim aqui. Então, o que precisamos fazer é personalizar nosso feed de página inicial. E então o que vamos fazer é abrir nossas visualizações de feed. E temos esta página inicial, ListView. E há algumas maneiras diferentes de fazermos isso. Podemos sobrescrever a consulta definida aqui escrevendo def, get query set, self, fazendo um monte de coisas lá, que é provavelmente a maneira correta de fazê-lo. Mas eu queria ter uma abordagem ligeiramente diferente. E eu quero converter isso de um ListView para uma visualização de modelo simples. E então vamos mudar esse ListView para uma exibição de modelo importando isso. E eu não acho que há mais nada em você além de ok, o que eu estava procurando era outra visão de lista. Posso apagar isto. Agora, aqui está a coisa, é que, mesmo que eu exclua isso, Django pare de reclamar, não há mais consulta definida para nós. Não há mais modelo que temos que ir e, na verdade, também não há mais posts. Então nós realmente temos que ir e excluir estes e adicioná-lo ao nosso contexto. Então podemos fazer surdos, dados GetContext. Auto pedido, args e quarks. Contexto é igual a super e morrer obter dados de contexto, solicitação. Args. E quarks. Devolva esse contexto. Agora podemos dizer que postagens de contexto é igual a, eu acho que é assim que chamamos. Vamos esperar que eu tenha feito isso muito pequeno. página inicial deles, sim, chamávamos-lhe mensagens. Então precisamos adicionar isso aos nossos contextos. Objetos post.All, ponto tudo. Obter dados de contexto faltando uma solicitação de argumento posicional necessária. Oh, ok. Nós não temos solicitação em nossos dados GetContext. Isso foi um pouco de um peido cerebral que eu tive lá. Aguarde até que recarregue. Ok, então eu acho que estes são na verdade em ordem inversa. Estes estão em ordem inversa agora. Por isso, temos de mudar isso também. E precisamos ver se alguém fez login para alterar dinamicamente essas postagens. Então, primeiro de tudo, vamos fazer isso, vamos deletar aquilo. E vamos dizer que se o usuário solicitação autodidata é autenticado, seguinte vai ser uma lista personalizada. Caso contrário, não vou seguir isso. Post vai ser uma lista personalizada e postagem. Caso contrário, se alguém não tiver logado é simplesmente vai ser post dot objetos,
dot, dot, dot order by ID. E vamos mostrar os primeiros 30 como fizemos originalmente. Nenhum pedido de auto-ponto não está definido ainda, então temos que fazer despacho surdo. Auto-pedido. Args, quarks, devolução super ponto despacho, pedido. Inquérito Args. E auto-ponto pedido vai ser, ea pergunta é igual a pedido. E isso nos permite usar auto-pedido de ponto aqui. Então, agora, se alguém está logado e não sabemos quais são esses posts. Precisamos de uma lista de todos os nossos seguidores. Então, digamos uma lista de quem estamos seguindo. Então, a seguir é igual a seguidor ponto-ponto objetos, filtro de ponto. E as pessoas que são seguidas por mim, self.age pedido usuário ponto. E isso vai nos dar um conjunto gigante de consultas. Agora não queremos uma consulta gigante que só queremos uma lista desses usuários. Então poderíamos fazer valores de ponto, lista seguinte. Só queríamos listar todas as pessoas que estavam seguindo. E queremos ter certeza de que isso é plano e que é imprimir isso. Imprimir a seguir. Eu vou comentar esta linha para fora para que ele não reclamar quando eu carrego o modelo. E vamos recarregar isso. Ela não vai mostrar nada. E por nada, quero dizer, ele vai mostrar um erro de importação como esperado. Então vamos fazer isso a partir de seguidores modelos ponto importar seguidor. Agora vamos recarregar isso e devemos, devemos ver que não há postagens lá dentro. E aqui embaixo deveríamos ver algo. Esse conjunto de consultas de dois. Não, nós não queremos que isso seja um conjunto de consultas e ele só diz dois lá dentro. Queremos que isto seja uma lista, para que possamos escrever isto como uma lista, se quisermos. E, de fato, vamos colocar isso em várias linhas só porque Python nos permite fazer isso. Agora o que podemos dizer é que os Posts copiam tudo isso. Mas em vez de tudo, podemos fazer filtro. E podemos dizer que o autor está em uma lista de seguir. E em vez de receber 30, se você estiver logado,
vamos em frente e mostrar 60. E vamos em frente e garantir que isso funcione. E isso não funcionou para mim. E isso é porque eu não coloquei posts no meu contexto. Contexto. Postagens é igual a postagens. E esse contexto, esse post está vindo de lá, bem aqui. Isso é importante. Não há nada para percorrer se não adicionarmos ao contexto. Lá vamos nós. Vamos em frente e clicar no nome desse cara, deixar de seguir, ir para casa. Não há nada lá. Agora mais uma coisa. Se não há nada lá, o que mostramos? Então, digamos que se esta lista está vazia,
por isso, se não seguir, mostrou o padrão 30. Senão, as postagens serão um pouco mais dinâmicas. Aqui vamos nós. Padrão 30. Vamos fazer isto. Lá vamos nós. E aquele trabalho que mostra todo mundo, todo mundo postar os últimos 30. Vamos seguir em frente. Bem, eu não consigo me seguir. Não aparece. Não é uma opção para mim. Mas o que posso fazer é seguir essa pessoa, voltar para casa, e isso muda minha lista para mim. Então agora temos um aplicativo de trabalho. Podemos nos livrar disso também. Não é de qualquer utilidade. E agora temos um aplicativo de trabalho. Há alguns pedaços e bobs que eu gostaria que você trabalhasse neles e depois contasse sobre aqueles em seu projeto na próxima lição.
44. SEU PROJETO: Ok. Olá e bem-vindo ao seu projeto final. Em seu projeto final, nós, enquanto todo este Django para u1 tem sido um grande projeto em si mesmo. Mas deixei algumas coisas abertas para interpretação. Então, por exemplo, se eu for ao Caleb, vai mostrar que tenho seguidores do XX. Você precisa preencher isso. Quantos seguidores você tem? Outra coisa que eu gostaria que você fizesse é um pouco de trabalho de front-end. Então, quando você faz login, você precisa realmente alterar esses modelos. Então eles, eles parecem um pouco mais bonitos porque agora eles não parecem muito bonitos, mas isso depende completamente de você. A outra coisa que eu gostaria que você fizesse é uma vez conectado, eu quero que você adicione uma nova seção aqui que permite ao usuário atualizar seu FirstName,
Sobrenome, seu nome de usuário, sua senha, e talvez fazer upload de uma imagem. Agora, se você não sabe por onde começar com o upload da imagem, nós cobrimos isso no Django 101. Então você pode querer fazer referência a que um é mais realmente recuperado tudo isso no Django 101, você pode usar um formulário modelo ou você pode usar um formulário regular e atualizar
manualmente as informações do usuário. Mas de qualquer forma, eu gostaria que você criasse uma nova área de conta aqui onde alguém pode alterar seu nome de usuário, senha, nome, sobrenome e avatar. Isso vai exigir um pouco de google, um pouco de pesquisa, um pouco de leitura dos patos Django. E isso é tudo experiência da vida real porque uma vez que você tem um emprego como um desenvolvedor web, você não vai ter seu dispositivo portátil mais. E um cliente vai dizer: “ Preciso de uma característica específica. E infelizmente você vai ter que ir e aprender como descobrir como resolver esse recurso. Você pode muito bem ter essa experiência agora enquanto está aprendendo. E se você realmente, realmente quer saber o que você pode fazer é tentar tornar este móvel responsivo se você é mais uma pessoa de front-end com mais conhecimento de front-end do que conhecimento de backend. Você sempre pode tentar fazer isso uma página responsiva porque agora, eu não acredito que isso seja realmente responsivo se responsivo em tudo. Portanto, ele não fica bem no celular, mas você pode querer ir em frente e fazê-lo parecer no celular. Quando tiver feito isso, não se esqueça de compartilhar seu projeto com o resto da turma. Especialmente eu. Quero ver no que estás a trabalhar. Quero ver como vai ser para você. Mas acima de tudo divirta-se um pouco com isso. E não se esqueça de se esforçar. É importante se esforçar porque é assim que você cresce. E não se esqueça de compartilhar seu projeto final e seu resultado final com o resto da turma e especialmente comigo, eu realmente gosto de ver o trabalho de todos. Mostre lá embaixo. Eu adoraria dar uma olhada.