Π₯ΠΎΡΠ΅ΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ IT-ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ?

ΠΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡΡΡ: ΡΡΡΠ΅ΡΡ, Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, Π²ΠΎΠΏΡΠΎΡΡ, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ Π³ΠΎΠ»ΠΎΠ²Π° ΠΈΠ΄ΡΡ ΠΊΡΡΠ³ΠΎΠΌ. ΠΠΎ Ρ AI ΡΡΠ΅Π½Π°ΠΆΡΡΠΎΠΌ Π²ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅.
💡 ΠΠΎΡΠ΅ΠΌΡ Π’1 ΡΡΠ΅Π½Π°ΠΆΡΡ β ΡΡΠΎ ΠΌΠ°ΡΡΡ ΡΠ²?
- ΠΠΎΠ»ΡΡΠΈΡΡ Π½Π°ΡΡΠΎΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ: Π³Π΄Π΅ Π·Π°ΡΡΠΊ, ΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ½ΡΡΡ ΠΈ ΠΊΠ°ΠΊ ΡΡΠ°ΡΡ Π»ΡΡΡΠ΅
- ΠΠ°ΡΡΠΈΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ°ΡΡ Π·Π°Π΄Π°ΡΠΈ, Π½ΠΎ ΠΈ ΠΎΠ±ΡΡΡΠ½ΡΡΡ ΡΠ²ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π»: "ΠΠ°Ρ!".
- ΠΡΠ²ΠΎΠΈΡΡ Π²ΡΠ΅ ΡΡΠ°ΠΏΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌ Π΄ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΎ ΡΠ²ΠΎΠΈΡ ΡΠ΅Π»ΡΡ .
ΠΠ°ΡΠ΅ΠΌ Π»ΠΈΡΡΠ°ΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ ΡΡΡΠΎΡΠΈΠ°Π»ΠΎΠ²? ΠΡΠΎΡΡΠΎ Π·Π°ΠΉΠ΄ΠΈ Π² Π’1 ΡΡΠ΅Π½Π°ΠΆΡΡ, ΠΏΠΎΡΡΠ΅Π½ΠΈΡΡΠΉΡΡ ΠΈ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ ΡΠ΄ΠΈΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΠΎΠ². ΠΡ Π½Π΅ ΠΎΠ±Π΅ΡΠ°Π΅ΠΌ Π»ΡΠ³ΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ»ΠΊΠΈ, Π½ΠΎ ΠΎΠ±Π΅ΡΠ°Π΅ΠΌ, ΡΡΠΎ Π±ΡΠ΄Π΅ΡΡ Π³ΠΎΡΠΎΠ²!
Π Π΅ΠΊΠ»Π°ΠΌΠ°. ΠΠΠ Β«Π‘ΠΌΠ°ΡΡ ΠΠΈΠΊΠΎΒ», ΠΠΠ 7743264341. Erid 2VtzqwP8vqy
Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠ°ΠΏ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ ΠΏΡΠΎΡΠΈΠ»ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π°Π²ΡΠΎΡΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°. ΠΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π΄Π΅ΡΡ.
Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ
ΠΠ° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π΅Π΅. Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π°Π²Π°ΡΠ°ΡΠΎΠΊ Π² Π½ΡΠΆΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΠΆΠ°Π½Π³ΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΏΠ°ΠΏΠΊΡ 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%} Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΏΠΈΡΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ:

ΠΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π» β Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² 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, β Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΡΠΌΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΆΠΈΠΌΠ°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ, ΡΡΠΎ ΠΊΠΎΠ΄ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΡΠ°ΠΏΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π·Π΄Π΅ΡΡ.
ΠΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ ΠΏΠΎ ΡΠ΅ΠΌΠ΅
- Django Junior: ΠΏΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡΠ΅Π³ΠΎ
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π° Django
- Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π½ΡΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΡΡΡ ΠΏΠΎ Django ΠΎΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ