πŸπŸš€ Django с нуля. Π§Π°ΡΡ‚ΡŒ 3: созданиС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ, сТатиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, CRUD ΠΈ пагинация

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π° разбСрСмся с автоматичСским созданиСм ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ CRUD, ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈΠ· json-Ρ„Π°ΠΉΠ»Π° ΠΈ сдСлаСм ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΡŽ.
61
πŸπŸš€ Django с нуля. Π§Π°ΡΡ‚ΡŒ 3: созданиС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ, сТатиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, CRUD ΠΈ пагинация

Π’Ρ€Π΅Ρ‚ΠΈΠΉ этап Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

На этом этапС ΠΌΡ‹ займСмся профилями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ прСдоставим Π°Π²Ρ‚ΠΎΡ€Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ свои записи со стороны Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°. Код для всСх Ρ„Π°ΠΉΠ»ΠΎΠ² этой части ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° находится здСсь.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ

На ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ этапС ΠΌΡ‹ ΡƒΠΆΠ΅ создали модСль для профиля ΠΈ зарСгистрировали Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ сохранСниС Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ Π² Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π”ΠΆΠ°Π½Π³ΠΎ создаСт ΠΏΠ°ΠΏΠΊΡƒ profile_pics (для хранСния Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ) Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ с ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π½Π΅ слишком ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ располоТСниС ΠΏΠ°ΠΏΠΊΠΈ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ my_site\settings.py ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Π°ΠΉΠ»Π° import os, Π° Π² ΠΊΠΎΠ½Π΅Ρ† Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅:

        MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

    

ЗапуститС сСрвСр, Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² панСль управлСния – Ρ‚Π°ΠΌ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» Profiles, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ количСство ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ Ρ€Π°Π²Π½ΠΎ 0, хотя ΠΌΡ‹ создали Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π§ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ автоматичСски ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с рСгистрациСй Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ², Π° ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ создадим Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ для Π°Π΄ΠΌΠΈΠ½Π° с Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΎΠΉ, ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π±Π΅Π· Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠΈ – Π²Π΅Ρ€Π½Π΅Π΅, Ρƒ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ default.jpg, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΡƒ media (Π½ΠΎ Π½Π΅ Π²Π½ΡƒΡ‚Ρ€ΡŒ profile_pics, Π° рядом).

ВнСситС измСнСния Π² шаблон профиля users\profile.html:

        {% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
	<div class="content-section">
  	<div class="media">
    	<img class="rounded-circle account-img" src="{{ user.profile.image.url }}">
    	<div class="media-body">
      	<h2 class="account-heading">{{ user.username }}</h2>
  	    <p class="text-secondary">{{ user.email }}</p>
    	</div>
  	</div>
  	<!-- Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ° -->
	</div>
{% endblock content %}

    

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ Π°Π΄ΠΌΠΈΠ½Π° выглядит Ρ‚Π°ΠΊ:

Π’ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ Π°Π΄ΠΌΠΈΠ½Π° появилась Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠ°
Π’ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ Π°Π΄ΠΌΠΈΠ½Π° появилась Π°Π²Π°Ρ‚Π°Ρ€ΠΊΠ°

АвтоматичСскоС созданиС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ с автоматичСским созданиСм ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ Π²ΠΎ врСмя рСгистрации. Π’ Π”ΠΆΠ°Π½Π³ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ сигналы. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» users\signals.py ΠΈ сохранитС Π² Π½Π΅ΠΌ этот ΠΊΠΎΠ΄. Π­Ρ‚ΠΈ сигналы Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² users\apps.py.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ автоматичСскоС созданиС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ – запустим сСрвСр ΠΈ создадим Π½ΠΎΠ²Ρ‹ΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚. ВсС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски
Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π½ΡƒΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ – ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ, Π½ΠΈΠΊ ΠΈ Π΅ΠΌΠ΅ΠΉΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Для этого внСсСм дополнСния Π² Ρ„Π°ΠΉΠ» users\forms.py – Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ from .models import Profile Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ этот ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Π΅Ρ†:

        class UserUpdateForm(forms.ModelForm):
	email = forms.EmailField()
 
	class Meta:
    	model = User
    	fields = ['username', 'email']
 
 
class ProfileUpdateForm(forms.ModelForm):
	class Meta:
    	model = Profile
    	fields = ['image']

    

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ users\views.py – Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ. Π’ шаблон profile.html Ρ‚ΠΎΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ внСсти дополнСния – Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ этот ΠΊΠΎΠ΄ вмСсто коммСнтария "здСсь Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°":

           	<form method="POST" enctype="multipart/form-data">
      	{% csrf_token %}
      	<fieldset class="form-group">
          	<legend class="border-bottom mb-4">Π’Π°Ρˆ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ</legend>
          	{{ u_form|crispy }}
              {{ p_form|crispy }}
      	</fieldset>
      	<div class="form-group">
          	<button class="btn btn-outline-info" type="submit">ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ</button>
      	</div>
  	</form>
    

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² своих профилях:

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½ΠΈΠΊ, Π΅ΠΌΠ΅ΠΉΠ» ΠΈ Π°Π²Π°Ρ‚Π°Ρ€
ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½ΠΈΠΊ, Π΅ΠΌΠ΅ΠΉΠ» ΠΈ Π°Π²Π°Ρ‚Π°Ρ€

АвтоматичСскоС сТатиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ слишком большиС изобраТСния, сСрвСр скоро окаТСтся ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ автоматичСскоС сТатиС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² качСствС Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ. Π’Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прСдоставляСт Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Pillow, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΡƒΠΆΠ΅ использовали. Для сТатия Ρ„ΠΎΡ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Pillow Π² users\models.py Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ изобраТСния ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‚ΡΡ автоматичСски.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π°Π²Π°Ρ‚Π°Ρ€ΠΎΠΊ Π² постах

Пока Ρ‡Ρ‚ΠΎ изобраТСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π²ΠΈΠ΄Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΈΡ… профилях. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΎΡ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ Π² постах Π±Π»ΠΎΠ³Π°, внСсСм дополнСния Π² шаблон blog\home.html – сохранитС Π² Π½Π΅ΠΌ этот ΠΊΠΎΠ΄. Аватарка ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ показываСтся Π² постС:

Аватарка Π°Π²Ρ‚ΠΎΡ€Π° отобраТаСтся рядом с Π΅Π³ΠΎ записями
Аватарка Π°Π²Ρ‚ΠΎΡ€Π° отобраТаСтся рядом с Π΅Π³ΠΎ записями

CRUD

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ постами, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ CRUD – Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ созданию, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅, Ссли ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прСдставлСния ΠΊ классам. Для этого Π½Ρ‹Π½Π΅ΡˆΠ½Π΅Π΅ содСрТимоС Ρ„Π°ΠΉΠ»Π° blog\views.py Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° это, Π° ΠΊΠΎΠ΄ blog\urls.py Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° классы PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView) ΠΈ PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView) – ΠΎΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ созданиС, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ записСй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зарСгистрированными ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ; ΠΏΡ€ΠΈ этом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ посты ΠΌΠΎΠ³ΡƒΡ‚ лишь ΠΈΡ… Π°Π²Ρ‚ΠΎΡ€Ρ‹.

Для просмотра ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… постов создадим шаблон post_detail.html Π²ΠΎΡ‚ с Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пост ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ: http://localhost:8000/post/1/. Π”ΠΎΠ±Π°Π²ΠΈΠΌ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² шаблон home.html:

        <h2><a class="article-title" href="{% url 'post-detail' post.id %}">{{ post.title }}</a></h2>
    

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ создания Π½ΠΎΠ²Ρ‹Ρ… постов. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» post_form.html с Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π€ΠΎΡ€ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΠΎ адрСсу http://localhost:8000/post/new/:

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ записи
ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ записи

ПослС создания записи слСдуСт ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ страницу поста. Для этого ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ blog\models.py Π½Π° этот, ΠΈ всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ страница для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи
ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ страница для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи

Записи ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ, Π½ΠΎ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ нСльзя ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ шаблон – Ρ„Π°ΠΉΠ» blog\post_confirm_delete.html. Код для Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ здСсь. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, послС подтвСрТдСния удалСния запись исчСзаСт, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ пСрСнаправляСтся Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ страницу Π±Π»ΠΎΠ³Π°:

ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ удалСния
ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ удалСния

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ссылку Π½Π° созданиС Π½ΠΎΠ²ΠΎΠΉ записи Π½Π° панСль Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ – ΠΌΡ‹ сдСлаСм это Π² шаблонС base.html, Π΄ΠΎΠ±Π°Π²ΠΈΠ² всСго ΠΎΠ΄Π½Ρƒ строку <a class="nav-item nav-link" href="{% url 'post-create' %}">Новая запись</a>. ВсС Π³ΠΎΡ‚ΠΎΠ²ΠΎ! Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΡΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ с Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ этапу.

Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ этап Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

На Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ этапС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΈΠ· json Ρ„Π°ΠΉΠ»Π° (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ консоли Django), сдСлаСм ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΈ обСспСчим Π²Ρ‹Π²ΠΎΠ΄ всСх постов Π°Π²Ρ‚ΠΎΡ€Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ страницС.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π° json

Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ посты ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, поэтому ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΈΠ· Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° posts.json. Запустим ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ консоль Π”ΠΆΠ°Π½Π³ΠΎ python manage.py shell ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚. ΠžΡ‚ΡΡ‚ΡƒΠΏΡ‹ Π² консоли – 2 вмСсто ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… 4:

        >>> import json
>>> from blog.models import Post
>>> with open('posts.json', encoding="utf8") as f:
...   posts_json = json.load(f)
...
>>> for post in posts_json:
...   post = Post(title=post['title']), content=post['content'], author_id=post['user_id']
...   post.save()
...
>>> exit()

    

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° нашСй Π³Π»Π°Π²Π½ΠΎΠΉ страницС отобраТаСтся мноТСство записСй.

ΠŸΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΡ

ΠŸΠΎΡ€Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΡŽ – Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ постов Π½Π° страницы. Для раздСлСния постов Π½Π° страницы внСсСм измСнСния Π² класс PostListView(ListView) Π² Ρ„Π°ΠΉΠ»Π΅ blog\views.py – Π΄ΠΎΠ±Π°Π²ΠΈΠΌ строку paginate_by = 5. ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ шаблон home.html – размСстим Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΠ°Π³ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ {% end for %} ΠΈ {% end block content%} Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π°. Записи Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° страницы:

ΠŸΠ°Π³ΠΈΠ½Π°Ρ‚ΠΎΡ€ раздСляСт записи ΠΏΠΎ 5 постов Π½Π° страницС
ΠŸΠ°Π³ΠΈΠ½Π°Ρ‚ΠΎΡ€ раздСляСт записи ΠΏΠΎ 5 постов Π½Π° страницС

Π•Ρ‰Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° страницС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ всС записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ создал – с ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ, Ссли записСй ΠΌΠ½ΠΎΠ³ΠΎ. Для этого ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² blog\views.py ΠΈΠΌΠΏΠΎΡ€Ρ‚ get_object_or_404 ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ класс:

        class UserPostListView(ListView):
	model = Post
	template_name = 'blog/user_posts.html'  # <app>/<model>_<viewtype>.html
	context_object_name = 'posts'
	paginate_by = 5
 
	def get_queryset(self):
    	user = get_object_or_404(User, username=self.kwargs.get('username'))
    	return Post.objects.filter(author=user).order_by('-date_posted')

    

Π‘Π΄Π΅Π»Π°Π΅ΠΌ шаблон user_posts.html ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Π΅ blog\urls.py:

        path('user/<str:username>', UserPostListView.as_view(), name='user-posts').
    

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ внСсти ΠΏΠΎΠΏΡ€Π°Π²ΠΊΡƒ Π² Π΄Π°Π½Π½Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€Π° Π² шаблон home.html:

        <a class="mr-2" href="{% url 'user-posts' post.author.username %}">{{ post.author }}</a>
    

ΠΈ Π² post_detail.html:

        <a class="mr-2" href="{% url 'user-posts' object.author.username %}">{{ object.author }}</a>.
    

И всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ:

Записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ выводятся Π½Π° Π΅Π³ΠΎ Π»ΠΈΡ‡Π½ΠΎΠΉ страницС
Записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ выводятся Π½Π° Π΅Π³ΠΎ Π»ΠΈΡ‡Π½ΠΎΠΉ страницС

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ для Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ³ΠΎ этапа ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ здСсь.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΠΎΡΡ‚Π°ΠΏΠ½ΠΎΠ΅ созданиС простого Π²Π΅Π±-прилоТСния Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстро ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Django. Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ позволяСт достаточно просто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CRUD, – Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ автоматичСски ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒ изобраТСния. НапоминаСм, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ для всСх этапов ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° доступСн здСсь.

***

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅


ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

 
 

здравствуйтС Π° ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ отобраТался пост Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΡƒΠΆΠ½ΠΎΠ³Π» Ρ‚Π΅Π±Π΅ числа?

25 января 2024

views.py:

from django.views.generic.dates import DateDetailView, ArchiveIndexView
from .models import Post

class PostDateDetailView(DateDetailView):
    model = Post
    date_field = "date_posted"
    allow_future = True

class PostArchiveIndexView(ArchiveIndexView):
    model = Post
    date_field = "date_posted"
    allow_future = True

urls.py:

from .views import PostDateDetailView, PostArchiveIndexView

urlpatterns = [
    path(
        "<int:year>/<int:month>/<int:day>/",
        PostDateDetailView.as_view(),
        name="archive_date_detail",
    ),
    path(
        "archive/",
        PostArchiveIndexView.as_view(),
        name="Post_archive",
    ),
]

Π¨Π°Π±Π»ΠΎΠ½:

<!-- Для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ -->
<h1>{{ object.title }}</h1>
<p>{{ object.content }}</p>

<!-- Для Π²Ρ‹Π²ΠΎΠ΄Π° Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² статСй -->
<ul>
    {% for post in latest %}
        <li>{{ post.date_posted }}: {{ post.title }}</li>
    {% endfor %}
</ul>
11 января 2024

ЗдравствуйтС, Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ваш ΠΊΠΎΠ΄ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π² дальнСйшСм Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ сСбя(css) Π½ΠΎ ΠΏΡ€ΠΈ пСрСносС вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊ сСбС Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол Ρƒ мСня ΠΏΠΈΡˆΠ΅Ρ‚ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ послС наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ "ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ".

11 января 2024

Аккаунт ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π°Π΄ΠΌΠΈΠ½Π°) создан?

11 января 2024

Π”Π°

11 января 2024

Π·Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ, создайтС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

12 января 2024

БСйчас ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ

12 января 2024

Ошибка ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Π°Π΄ΠΌΠΈΠ½ панСль

12 января 2024

МоТно Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ Π² Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌΠΌΠ΅? Π° я Π²Π°ΠΌ скину Π·ΠΈΠΏΠΊΡƒ, сами посмотритС

@aut_li

12 января 2024

ΠΎΠΊ, скидывайтС - @natkaida

26 августа 2023

Бпасибо ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ Π·Π° Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»

24 апрСля 2023

Ошибка, Django ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽ. ΠŸΠΈΡˆΠ΅Ρ‚: Not Found: /media/profile_pics/Django-Unchained-2012.jpg ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ ΠΏΠΆ

24 апрСля 2023

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с настройками ΠΌΠ΅Π΄ΠΈΠ°-ΠΏΠ°ΠΏΠΊΠΈ Π² settings.py ΠΈ/ΠΈΠ»ΠΈ Π² urls.py ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΠ½Π΅ΡΠΈΡ‚Π΅ настройки, разбСрСмся:).

05 ΠΌΠ°Ρ€Ρ‚Π° 2023

ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅, поТалуйста ΠΏΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρƒ постов ΠΈΠ· json. Π’Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ (скрин ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΠ»Π°). Если ΡΡ‚Π°Π²Π»ΡŽ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ просят ==, Π²Ρ‹Π΄Π°Π΅Ρ‚, name 'title' is not defined. Бпасибо

20 ΠΌΠ°Ρ€Ρ‚Π° 2023

Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ?

24 апрСля 2023

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ всС сначала, с ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° import json, Ρ‚.ΠΊ. консоль ΡƒΠΆΠ΅ потСряла связь ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° с Ρ†ΠΈΠΊΠ»ΠΎΠΌ:). ΠŸΡ€ΠΎΡ‰Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Ρ‚ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π»Π° Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ… Ρ€Π°Π½Π΅Π΅, 22 января.

Ρ‚Π°ΠΌ синтаксичСская ошибка. НС Π΄ΡƒΠΌΠ°ΡŽ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Ρ‚Π΅ ΠΌΠΎΠΉ ΠΊΠΎΠΌΠ΅Π½Ρ‚ Π½ΠΎ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²ΠΎΡ‚ это post = Post(title=post['title'], content=post['content'], author_id=post['user_id']) ΠΈ Ρƒ вас всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

04 ΠΌΠ°Ρ€Ρ‚Π° 2023

Π‘Π΄Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ Π·Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»! Π‘ΠΊΠ°ΠΆΠΈΡ‚Π΅, Π° ΠΊΠ°ΠΊ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΡƒ media?

04 ΠΌΠ°Ρ€Ρ‚Π° 2023

Папка media находится Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ с ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ blog, my_site ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠΌ manage.py:

05 ΠΌΠ°Ρ€Ρ‚Π° 2023

спасибо!!

ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ постов? Бпасибо

02 ΠΌΠ°Ρ€Ρ‚Π° 2023

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ функциями Ρ‚ΠΈΠΏΠ° Π»Π°ΠΉΠΊΠΎΠ², Π›Π‘ ΠΈ Ρ‚.Π΄.) Π² этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ - https://proglib.io/p/sozdaem-rekrutingovyy-portal-na-django-chast-1-2022-07-18

ЗдравствуйтС, спасибо большоС Π·Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π». Один вопрос остался. Π’Π΅ΠΏΠ΅Ρ€ΡŒ я Π½Π΅ ΠΌΠΎΠ³Ρƒ Π·Π°ΠΉΡ‚ΠΈ Π² Π°Π΄ΠΌΠΈΠ½ панСль ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ профиля ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС? ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ супСр ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ?

23 января 2023

Π”Π°, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если Π±Π°Π·Ρƒ Π΅Ρ‰Π΅ Π½Π΅ создавали, Ρ‚ΠΎ Ρ‚Π°ΠΊ:

manage.py migrate
manage.py createsuperuser
manage.py makemigrations
manage.py migrate
22 января 2023

Бпасибо Π·Π° Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»! ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ поТалуйста, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ посты ΠΈΠ· json-Ρ„Π°ΠΉΠ»Π° Ρ‡Π΅Ρ€Π΅Π· консоль всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Ссли ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ python Ρ„Π°ΠΉΠ» с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ - Π½Π΅ получаСтся Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ - Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

raise ImproperlyConfigured(django.core.exceptions.ImproperlyConfigured: Requested setting AUTH_USER_MODEL, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Π’.Π΅. Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ строчка from blog.models import Post

22 января 2023

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ скрипту для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ трСбуСтся json, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сформирован ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ (для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ модСль). ΠšΡΡ‚Π°Ρ‚ΠΈ, Π² Django Π΅ΡΡ‚ΡŒ встроСнный инструмСнт для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, называСтся fixtures. ΠŸΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠΌ Ρ‚Π°ΠΊ - Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ fixtures Π²Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΏΠΊΠΈ blog), ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ manage.py loaddata posts.json. Π‘Π°ΠΌ json ΠΏΡ€ΠΈ этом Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

[
  {
    "model": "blog.post",
    "pk": 1,
    "fields": {
      "title": "ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°",
      "content": "ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая считываСт элСмСнты ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡƒΡΡ‚ΡƒΡŽ строку, ΠΈ снова Ρ‚Ρƒ ΠΆΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ, Π½ΠΎ ΡƒΠΆΠ΅ помСняв мСстами строки со столбцами: пСрвая строка выводится ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ столбСц, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.",
      "author": "1"
    }
  },
  {
    "model": "blog.post",
    "pk": 2,
    "fields": {
      "title": "Π”ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹",
      "content": "Π”Π°Π½Π° квадратная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° чисСл. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая мСняСт мСстами элСмСнты, стоящиС Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ, ΠΏΡ€ΠΈ этом ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ столбцС (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ столбцС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами элСмСнт Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ ΠΈ Π½Π° ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ).",
      "author": "2"
    }
  }
]

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° скринС.

14 января 2023

А ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ рСгистрации сразу Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ профиля? Π”ΠΎΠ±Π°Π²Π»ΡΡŽ Π² Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΠΎΠ»Π΅ image=form.ImageField(), Π½ΠΎ Π²ΠΎ views Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹

14 января 2023

Π’ forms.py, Π² классС Meta профиля Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅. НапримСр:

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']
class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('photo')

Π’ models.py Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    photo = models.ImageField(upload_to='profile_images', blank=True)

Π’ΠΎ views.py Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ register срСди ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ:

....
        profile_form = UserProfileForm(data=request.POST)
....
            profile = profile_form.save(commit=False)
            profile.user = user
            if 'photo' in request.FILES:
                profile.photo = request.FILES['photo']
            profile.save()
....

Π’ шаблонС для Ρ„ΠΎΡ€ΠΌΡ‹ рСгистрации ΠΌΠ΅Ρ‚ΠΎΠ΄ POST ΠžΠ‘Π―Π—ΠΠ’Π•Π›Π¬ΠΠž Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ с enctype="multipart/form-data", ΠΊΠ°ΠΊ Π² шаблонС профиля.

11 января 2023

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ я Π²ΡΡ‚Π°Π²Π»ΡΡŽ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ с Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ, Ρƒ мСня постоянная ошибка django.core.exceptions.ImproperlyConfigured: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form UserUpdateForm needs updating. Π’ Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°?

11 января 2023

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π΅ пСрСчислСны поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ (Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ). Π£ вас Π² forms.py поля пСрСчислСны? Если ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ ΠΈ Π½Π° Π“ΠΈΡ‚Ρ…Π°Π±Π΅, Π²ΠΏΠΎΠ»Π½Π΅ вСроятно, Ρ‡Ρ‚ΠΎ это слСдствиС создания профиля Π±Π΅Π· сигнала (Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚Π°ΠΌ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ создалось ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ).

05 ΠΌΠ°Ρ€Ρ‚Π° 2023

Ρƒ мСня Ρ‚ΠΎΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ Π±Ρ‹Π»ΠΎ, Ρ‚Π°ΠΌ Π½Π°Π΄ΠΎ Π²Ρ‹Ρ€ΠΎΠ²Π½ΡΡ‚ΡŒ отступы строк ΠΊΠΎΠ΄Π°

11 января 2023

ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΊΡƒ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сигналы для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ профиля? Π― Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π» ΠΎ сигналах Π΄ΠΎ этого Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΈ ΠΌΠ½Π΅ это показалось слишком слоТным ΠΈ я просто Π΄ΠΎΠ±Π°Π²ΠΈΠ» этот ΠΊΠΎΠ΄ Π²ΠΎ views.register Profile(user=User.objects.get(username=form.cleaned_data['username']),).save() Ρ‚Π΅ΠΌ самым создавая Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса Profile Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ рСгистрации Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ сохраняя Π΅Π³ΠΎ Π² Π‘Π”. Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

11 января 2023

ΠžΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сигналы для автоматичСского создания профиля. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС - ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ ΠΈ Π½Π΅Ρ‚:).

27 дСкабря 2022

Ρƒ мСня ΠΏΡ€ΠΈ рСгистрации Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½Π΅ создаСтся ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ΠΊΠ°ΠΊ я понял)

Ссли Ρƒ ΠΊΠΎΠ³ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Ρ‚Π°ΠΊΠΎΠ΅, Ρ‚ΠΎ Π² models.py

def save(self):
    super().save()

Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ Π½Π°

def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
09 дСкабря 2022

Бпасибо! ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π». Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π±Ρ‹ Π΅Ρ‰Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 300 символов ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΈ ссылку для чтСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ тСкста.

09 дСкабря 2022

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ "Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ дальшС" ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π²ΡŒΡŽ поста ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ количСством символов ΠΎΡ‡Π΅Π½ΡŒ просто - Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² шаблон home.html Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ slice - Ρƒ мСня Ρ‚Π°ΠΌ 200 символов:

Бпасибо ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ Π·Π° Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»! ΠžΡ‡Π΅Π½ΡŒ доступно, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ понятно!

25 октября 2022

Бпасибо! Π•Ρ‰Π΅ Π±Ρ‹ всС Ρ‚ΠΎΠΆΠ΅ самоС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π²ΠΈΠ΄Π΅ΠΎΡ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΊΡ€ΡƒΡ‚ΠΎ.

25 октября 2022

Π”Π°, ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ Π² скором Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Ρ‚ΠΎΠΆΠ΅:).

12 октября 2022

from django.db.models.signals import post_save from django.contrib.auth.models import User from django.dispatch import receiver from .models import Profile

(post_save, sender=User) def create_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance)

(post_save, sender=User) def save_profile(sender, instance, **kwargs): instance.profile.save()

А ΠΊΠ°ΠΊ здСсь Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π±Π΅Π· ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ части? ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠΆ. Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ понятно.

13 октября 2022

Π‘ΠΈΠ³Π½Π°Π»Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² users/apps.py.

16 июля 2022

Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо Π·Π° Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» !!! Для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… самоучСк Π²Ρ€ΠΎΠ΄Π΅ мСня это просто ΠΌΠ°Π½Π½Π° нСбСсная !!!

16 июля 2022

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π½Π΅Π΄Π΅Π»Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ Π”ΠΆΠ°Π½Π³ΠΎ-Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» - Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° слоТного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с мСссСндТСром, поиском ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ плюшками:).

23 января 2023

ЗдравствуйтС. Π“Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° слоТного ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с мСссСндТСром?

23 января 2023

Бпасибо ✊️

14 июня 2022

ΠžΡ‚Π»ΠΈΡ‡Π½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ поТалуйста Π΅Ρ‰Ρ‘ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ SPA Π½Π° JavaScript ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π° Django

15 июня 2022

Бпасибо:). Π‘ΠΊΠΎΡ€ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ SPA Π½Π° ЀласкС, Π½ΠΎ Π΄Π°, ΠΈ ΠΏΠΎ Π”ΠΆΠ°Π½Π³ΠΎ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:).

10 июля 2022

ЗдравствуйтС, я Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π·Π°ΠΉΡ‚ΠΈ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ, ΠΈΠ»ΠΈ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρƒ мСня Π²Ρ‹ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ

10 июля 2022

Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись Π°Π΄ΠΌΠΈΠ½Π°-ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Если Π²ΠΎ врСмя создания ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка Ρ‚ΠΈΠΏΠ° TypeError: save() got an unexpected keyword argument 'force_insert', Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ сохранСния ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ: def save(self, *args, *kwargs): super(Profile, self).save(args, **kwargs)

10 июля 2022

Π’Ρ‹ Π½Π΅ ΠΏΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ я Π½ΠΎΡ‡ΡŒΡŽ это сдСлал, Π½ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ‚ΠΎ всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹ΠΊΠΈΠ΄Ρ‹Π²Π°Π»ΠΎ, сСйчас всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚)) подскаТитС Π° ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ сСйчас Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ страницу ΠΏΡ€ΠΈΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ сСрвис для сокращСния ссылок ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΠ»Π°ΡΡŒ история создания ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ссылок?

10 июля 2022

Π­Ρ‚ΠΎ довольно объСмная Ρ€Π°Π±ΠΎΡ‚Π°. Π’ΠΊΠ»ΡŽΡ‡Ρƒ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². МоТно ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ - django-simple-history ΠΈ django-link-shortener, Π° Π²ΠΎΡ‚ здСсь Π°Π²Ρ‚ΠΎΡ€ сдСлал с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Graphene-Django - https://www.digitalocean.com/community/tutorials/how-to-create-a-url-shortener-with-django-and-graphql-ru.

20 августа 2022

ЗдраствуйтС. ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ изобраТСния Π² class PostCreateView(LoginRequiredMixin, CreateView): model = Work form_class = UserFormWorks template_name = 'profilecreate_project.html' success_url = reverse_lazy('users_profile')

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['form'] = UserFormWorks(instance=self.request.user)
    context['works'] = Work.objects.all()
    return context

def form_valid(self, form):
    form.instance.author = self.request.user
    return super().form_valid(form)
21 августа 2022

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ enctype="multipart/form-data" Π² шаблон. И ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠšΠΎΡ€ΠΎΡ‡Π΅, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ: https://learndjango.com/tutorials/django-file-and-image-uploads-tutorial

21 августа 2022

Ρƒ мСня это Π΅ΡΡ‚ΡŒ, мСня интСрСсуСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„ΠΎΡ€ΠΌΡ‹ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π½Π° основС классов. View. Π²ΠΈΠ΄Π΅Π» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΏΠΈΡˆΡƒΡ‚. Π― написал ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Ρƒ мСня отправляСтся Ρ„ΠΎΡ€ΠΌΠ°, Π½ΠΎ Π½Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Бпасибо Π·Π° Π£Ρ€ΠΎΠΊ! Если Π½Π΅ слоТно сдСлайтС Π³Π°ΠΉΠ΄ ΠΏΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· google ΠΈ meta.

22 августа 2022

ΠœΠΎΠΆΠ΅Ρ‚, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±, я сСбС ΠΏΠΎΡΡ‚Π°Π²Π»ΡŽ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€ΡŽ, Π² Ρ‡Π΅ΠΌ Ρ‚Π°ΠΌ Π΄Π΅Π»ΠΎ? ΠŸΡ€ΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ - отличная идСя, Π½Π°ΠΏΠΈΡˆΡƒ:).

25 августа 2022

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ прСкрасно сохраняСт ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ с Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°. Π‘ΠΎΡ€Ρ€ΠΈ Π·Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠŸΡ€ΠΎΠ³Π»ΠΈΠ± автоматичСски Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ ΠΊΠΎΠ΄ Π² коммСнтариях:

25 августа 2022

Π’ΠΎΡ‚ ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° - всС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π±Ρ‹Π»ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ с Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°:

26 августа 2022

Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ) я пытался ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π±Ρ‹ всС изобраТСния Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»ΠΈΡΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅, Π½ΠΎ это Ρ‚ΠΎΠΆΠ΅ оказался Π²Ρ‹Ρ…ΠΎΠ΄.)

26 августа 2022

Π•ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ это автоматичСски - django-galleryfield ΠΈ ckeditor, послСдний Π΅Ρ‰Π΅ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ rtf Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ обСспСчиваСт.

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

LIVE >

Подпишись

Π½Π° push-увСдомлСния