#Savol:
Assalomu alekum. Bir firmaga Django App qilib berayotgan edim. Oizm Junior bolganim uchun uncha yaxshi tushunmadim. Xullas dasturda bir nechta guruhlar boladi. Teamlarga Team Leaderlar javobgar boladi va ularning Teamlarida 6- tadan userlar boladi. Savolim qanday qilib Teamlar uchun User Model yasasam boladi va ularning Team memberlarini ham qoshishim kerek. Aytgancha Team Memberlarini ham oznini akkaunti boladi, buni google va stackoverflow dan ham topa olmadim. iltimos shunga yordam bersangiz yoki qayerdan bilib olishni ko'rsatib yurobsangiz! Javobingizni kutib qolaman. Javob uchun Oldindan raxmat!
#Javob
Agar teamlar hammasi alohida alohida bo'ladigan bo'lsa, ya'ni Team1, Team2, Team3 ko'rinishida bo'lsa, team uchun bitta model tayyorlab, unga userlarni many-to-many qilib bog'laysiz, user larni permission orqali nimalar qila olishini boshqarishingiz mumkin.
Taxminiy model:
class User(models.Model):
*name - CharField
*email - EmailFIeld
*user_role - choice (oddiy user, team leader)
class Team(models.Model):
*name - charField
*users = ManyToManyField(User, related_name=teams)
Har bir komandada 6 tadan user qo'shish uchun limit kiritishni save methodini override qilib amalga oshirsa ham bo'ladi.
Assalomu alekum. Bir firmaga Django App qilib berayotgan edim. Oizm Junior bolganim uchun uncha yaxshi tushunmadim. Xullas dasturda bir nechta guruhlar boladi. Teamlarga Team Leaderlar javobgar boladi va ularning Teamlarida 6- tadan userlar boladi. Savolim qanday qilib Teamlar uchun User Model yasasam boladi va ularning Team memberlarini ham qoshishim kerek. Aytgancha Team Memberlarini ham oznini akkaunti boladi, buni google va stackoverflow dan ham topa olmadim. iltimos shunga yordam bersangiz yoki qayerdan bilib olishni ko'rsatib yurobsangiz! Javobingizni kutib qolaman. Javob uchun Oldindan raxmat!
#Javob
Agar teamlar hammasi alohida alohida bo'ladigan bo'lsa, ya'ni Team1, Team2, Team3 ko'rinishida bo'lsa, team uchun bitta model tayyorlab, unga userlarni many-to-many qilib bog'laysiz, user larni permission orqali nimalar qila olishini boshqarishingiz mumkin.
Taxminiy model:
class User(models.Model):
*name - CharField
*email - EmailFIeld
*user_role - choice (oddiy user, team leader)
class Team(models.Model):
*name - charField
*users = ManyToManyField(User, related_name=teams)
Har bir komandada 6 tadan user qo'shish uchun limit kiritishni save methodini override qilib amalga oshirsa ham bo'ladi.
π20π₯1
#Savol
Assalomu aleykum, task management app qilayotgan edim. App da proyektlar, tasklar va user lar bo'ladi.
πΉBitta projectda bir nechta foydalanuvchilar bo'lishi mumkin
πΉBitta projectda bir nechta tasklar bo'lishi mumkin
πΉBitta taskka faqatgina bittagina user biriktirilishi mumkin.
Userni djangoni o'zining User modelidan foydalanmoqchiman model qismida yordam kerak edi. Oldindan rahmat
#Javob
πΈ
πΈ
β Ma'lum bir foydalanuvchi qatnashayotgan barcha tasklarni ko'rish uchun
πΈ
Assalomu aleykum, task management app qilayotgan edim. App da proyektlar, tasklar va user lar bo'ladi.
πΉBitta projectda bir nechta foydalanuvchilar bo'lishi mumkin
πΉBitta projectda bir nechta tasklar bo'lishi mumkin
πΉBitta taskka faqatgina bittagina user biriktirilishi mumkin.
Userni djangoni o'zining User modelidan foydalanmoqchiman model qismida yordam kerak edi. Oldindan rahmat
#Javob
From django.contrib.auth.models import User
class Project(models.Model):
name = models.CharField(max_length=100)
users = models.ManyToManyField(User)
class Task(models.Model):
project = models.ForeignKey(Project, related_name='project_tasks')
name = models.CharField(max_length=300)
bajaruvchi = models.ForeignKey(User, related_name='tasks')
β
Ma'lum bir proyektda qatnashayotgan barcha user larni bilish uchunπΈ
proj = Projects.objects.get(name="magazinApp")
users = proj.users.all()
β
Ma'lum bir projectdagi barcha tasklarni ko'rish uchunπΈ
tasks = proj.projects_tasks.all()
project_tasks kalit so'zini Task modelida project modeliga bog'lashda related_name qismida ishlatganmiz.β Ma'lum bir foydalanuvchi qatnashayotgan barcha tasklarni ko'rish uchun
πΈ
u = User.objects.get(username="birorusername")
u.tasks.all()
tasks kalit so'zini Task modelida bajaruvchi fieldi ichida related_name bilan kiritib ketganmiz.π8π€©1
#savol
Qanday qilib bazadan olingan querysetni Viewda Json formatda Response qaytarish mumkin.
#javob
Avval modeldan istalgancha queryset olinib, values orqali Response qaytarish mumkin
Misol uchun Product model bor, DB dagi barcha productlarni Json formatda jo'natish kerak
Qanday qilib bazadan olingan querysetni Viewda Json formatda Response qaytarish mumkin.
#javob
Avval modeldan istalgancha queryset olinib, values orqali Response qaytarish mumkin
Misol uchun Product model bor, DB dagi barcha productlarni Json formatda jo'natish kerak
class ProductListView(APIView):
def get(self, request):
products =
Product.objects.all().values("id", "name", "price")
products_count = products.count()
return Response({"products": products, "products_count": products_count})
π9
#savol:
djangoda deface, ddos, sql injection lardan qanday himoyalansa boladi?
#javob:
Deface - adashmasam, saytni buzib kirgandan so'ng bajariladigan amal, ya'ni asosiy sahifani o'zlari xohlashgandek o'zgartirib ketishadi, Hacked by... degandek)
SQL Injection - bu turdagi xakerlik hujumidan django shundoq ham himoyalangan. Odatda djangoda ma'lumotlar bazasiga SQL query bilan emas, django ORM bilan murojaat qilinadi. Agar dasturda to'g'ridan to'g'ri SQL query bilan murojaat qilinadigan qism bo'lmasa, Django dasturiga SQL injection bilan hujum qilib buzib bo'lmaydi.
DDOS hujumini oldini olish uchun, django uchun Django-axes, Django-defender, Django-ratelimit kabi tayyor packagelar bor. Shulardan foydalaning. Agar DRF bo'ladigan bo'lsa, yuqoridagi packagelar ham kerak emas. DRF da tayyor throttling funksiyasi bor, limitlash va cheklash uchun ishlatiladi. Bundan tashqari, quyidagicha yechimlar ham ancha samarali bo'ladi:
1) Muvaffaqiyatsiz loginlarni saqlab borib, nechtadir xato urinishdan so'ng, o'sha IP ni bloklash
2) Agar bloklashni xohlamasangiz, CAPTCHA ishlating
3) Har muvaffaqiyatsiz login qilingandan so'ng keyingi login amalini bajarish uchun, ma'lum bir vaqt belgilang. Misol uchun, 3 marta muvaffaqiyatsiz urinishdan so'ng, keyingi login qilish uchun 60 sekund kutish kerak, keyingisida 100 sekund va hokazo.
P.S. Eng asosiysi, oddiy xavfsizlik qoidalariga amal qilishni unutmang. Maxfiy parollaringizni, ma'lumotlarni ochiq fayllarda qoldirmang. Admin qismi uchun admin/123456789 kabi parollardan foydalanmang π.
@djangodarslari
djangoda deface, ddos, sql injection lardan qanday himoyalansa boladi?
#javob:
Deface - adashmasam, saytni buzib kirgandan so'ng bajariladigan amal, ya'ni asosiy sahifani o'zlari xohlashgandek o'zgartirib ketishadi, Hacked by... degandek)
SQL Injection - bu turdagi xakerlik hujumidan django shundoq ham himoyalangan. Odatda djangoda ma'lumotlar bazasiga SQL query bilan emas, django ORM bilan murojaat qilinadi. Agar dasturda to'g'ridan to'g'ri SQL query bilan murojaat qilinadigan qism bo'lmasa, Django dasturiga SQL injection bilan hujum qilib buzib bo'lmaydi.
DDOS hujumini oldini olish uchun, django uchun Django-axes, Django-defender, Django-ratelimit kabi tayyor packagelar bor. Shulardan foydalaning. Agar DRF bo'ladigan bo'lsa, yuqoridagi packagelar ham kerak emas. DRF da tayyor throttling funksiyasi bor, limitlash va cheklash uchun ishlatiladi. Bundan tashqari, quyidagicha yechimlar ham ancha samarali bo'ladi:
1) Muvaffaqiyatsiz loginlarni saqlab borib, nechtadir xato urinishdan so'ng, o'sha IP ni bloklash
2) Agar bloklashni xohlamasangiz, CAPTCHA ishlating
3) Har muvaffaqiyatsiz login qilingandan so'ng keyingi login amalini bajarish uchun, ma'lum bir vaqt belgilang. Misol uchun, 3 marta muvaffaqiyatsiz urinishdan so'ng, keyingi login qilish uchun 60 sekund kutish kerak, keyingisida 100 sekund va hokazo.
P.S. Eng asosiysi, oddiy xavfsizlik qoidalariga amal qilishni unutmang. Maxfiy parollaringizni, ma'lumotlarni ochiq fayllarda qoldirmang. Admin qismi uchun admin/123456789 kabi parollardan foydalanmang π.
@djangodarslari
π18π₯1
Django darslari (Mukhammad irmatov)
#savol: Django rest frameworkda serializer yozilgan, o'sha serializerni qanday qilib filtr qilish mumkin agar u boshqa serializerga nested qilingan bo'lsa. class productSerializer(ModelSerialzier): * guid = UUIDField() * name = charField() * reviews = Rβ¦
#javob
2 ta yechim bor. 1-si ReviewSerializerga to_representation orqali faqat is_hidden=False bo'lganlarni chiqarmaslik kerak.
2-yechim esa ReviewSerializerga yana bitta FilterSerializer yozish kerak, masalan
Endigi ish, filtrlangan serializerni Reviewserializerga ulab qo'yish kerak:
2 ta yechim bor. 1-si ReviewSerializerga to_representation orqali faqat is_hidden=False bo'lganlarni chiqarmaslik kerak.
2-yechim esa ReviewSerializerga yana bitta FilterSerializer yozish kerak, masalan
class FilterHiddenReviewListSerializer(serializers.ListSerializer):Ya'ni alohida bitta FilterReviewList yozildi, u orqali reviewlarni filtrlab oldik
def to_representation(self, data):
data = data.filter(is_hidden=False)
return super().to_representation(data)
Endigi ish, filtrlangan serializerni Reviewserializerga ulab qo'yish kerak:
class ReviewSerializer(ModelSerializer):Agar sizda bundanda optimal yechim bo'lsa izohlarda qoldirishingiz mumkin.
* guid = UUIDField()
* author = AuthorSerializer(read_only=True)
* review = TextField()
* is_hidden = BooleanField(default=False)
class Meta:
list_serializer_class = FilterHiddenReviewListSerializer
π₯10π1