<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Ali Ranjbar</title>
        <link>https://virgool.io/feed/@aranjbar1372</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-04-15 10:26:30</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/206530/avatar/1z2Zil.png?height=120&amp;width=120</url>
            <title>Ali Ranjbar</title>
            <link>https://virgool.io/@aranjbar1372</link>
        </image>

                    <item>
                <title>تایید ایمیل در django rest framework</title>
                <link>https://virgool.io/@aranjbar1372/%D8%AA%D8%A7%DB%8C%DB%8C%D8%AF-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%AF%D8%B1-django-rest-framework-lkhuwkdecnmh</link>
                <description>در بسیاری از برنامه‌های وب، نیاز به تایید ایمیل کاربران برای فعال‌سازی  حساب کاربری و تأیید اعتبار آن‌ها وجود دارد. در این مقاله، ما به بررسی  روش‌های تایید ایمیل در Django Rest Framework (DRF) می‌پردازیم. DRF، یک  فریمورک قدرتمند برای توسعه وب سرویس‌های RESTful در پایتون است.نصب و تنظیمات:ابتدا، پکیج dj-rest-auth را با استفاده از pip نصب کنید:pip install dj-rest-authسپس، dj-rest-auth را به فایل INSTALLED_APPS پروژه خود اضافه کنید:INSTALLED_APPS = [
    ...
    &#039;dj_rest_auth&#039;,
    ...
]همچنین، تنظیمات مربوط به ایمیل و تایید ایمیل را در فایل settings.py پروژه تنظیم کنید. برای مثال:EMAIL_BACKEND = &#039;django.core.mail.backends.console.EmailBackend&#039;  # or add your SMTP configs

ACCOUNT_EMAIL_VERIFICATION = &#039;mandatory&#039; 
ACCOUNT_EMAIL_CONFIRMATION_URL = &#039;http://example.com/confirm-email/{key}/&#039;  # لینک تأیید ایمیل
ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = &#039;http://example.com/login/&#039;
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = &#039;http://example.com/&#039;آپدیت URLs:برای فعال‌سازی مسیرهای مربوط به تایید ایمیل، فایل urls.py پروژه خود را به شکل زیر به‌روزرسانی کنید:from django.urls import include, path

urlpatterns = [
    ...
    path(&#039;api/&#039;, include(&#039;dj_rest_auth.urls&#039;)),
    path(&#039;api/registration/&#039;, include(&#039;dj_rest_auth.registration.urls&#039;)),
    ...
]ارسال ایمیل تأیید: پکیج dj-rest-auth به صورت خودکار ایمیل تأیید را برای هر حساب کاربری جدید ارسال می‌کند.در فایل تنظیمات، شما می‌توانید قالب ایمیل و لینک تأیید را تعیین کنید.کاربران باید بر روی لینک تأیید ایمیل که در ایمیل ارسال شده به آن‌ها قرار دارد، کلیک کنند تا حساب کاربریشان تأیید شود.پس از کلیک بر روی لینک تأیید، کاربر به یک صفحه تأیید هدایت می‌شود که نشان می‌دهد حساب کاربریشان با موفقیت تأیید شده است.این لینک به شکل زیر است:http://192.168.3.91:8000/api/auth/registration/account-confirm-email/NA:1q3ciY:dQKWk7kNbiDgvHUhmkF2n1ifqy6_ddKkyDRYmKxWts4/خب چالش اصلی همینجا هست و من مشکلی که داشتم این بود که میخواستم بجای اینکه کاربر وقتی روی لینک کلیک میکنه و صفحه ی مربوط به خود drf باز بشه، صفحه ی مربوط به فرانتی که با ری اکت نوشته شده بود باز بشه و من طبق این لینک یک ویو جدید ساختم.در واقع وقتی کاربر بر روی لینک کلیک میکند، یک کلید در انتهای url قرار دارد و ما به این کلید نیاز داریم تا بتوانیم آن را برای api دیگری در درون برنامه مان ارسال کنیم. ویو به این شکل است:from django.conf import settings
from django.shortcuts import redirect


class VerifyUserEmail(viewsets.GenericViewSet):
    queryset = User.objects.all()
    permission_classes = [permissions.AllowAny]

    def list(self, request, key):
        verify_url = f&#039;{reverse(&#039;rest_verify_email&#039;)}&#039;
        url = request.build_absolute_uri(verify_url)
        response = requests.post(url, data={&amp;quotkey&amp;quot: key})
        if response.status_code == 200:
            return redirect(&amp;quothttp://localhost:3000/auth/register/status/success/&amp;quot)
        return redirect(&amp;quothttp://localhost:3000auth/register/status/failed/&amp;quot)و یک url برایش تعریف میکنیم. به ترتیب ها دقت کنید:path(&#039;api/auth/registration/account-confirm-email/&lt;str:key&gt;/&#039;,
     VerifyUserEmail.as_view({&amp;quotget&amp;quot: &amp;quotget&amp;quot}), name=&#039;account_confirm_email&#039;),
path(&#039;api/auth/registration/&#039;, include(&#039;dj_rest_auth.registration.urls&#039;)),تمام.فقط به نکات زیر توجه کنید:در فایل تنظیمات، شما می‌توانید آدرس‌های انتقال کاربر بعد از تأیید ایمیل را تنظیم کنید.پکیج dj-rest-auth از سیگنال‌های user_signed_up و email_confirmed برای اعتبارسنجی تایید ایمیل استفاده می‌کند.شما می‌توانید برای انجام اعمال دلخواه پس از تایید ایمیل، به این سیگنال‌ها گوش دهید و کدهای مربوطه را اضافه کنید. برای مثال، شما می‌توانید در سیگنال email_confirmed دسترسی حساب کاربری را فعال کنید یا دیگر تنظیمات مورد نیاز را انجام دهید.با اتمام این مراحل، شما قادر خواهید بود تا تایید ایمیل را در Django Rest Framework با استفاده از پکیج dj-rest-auth پیاده‌سازی کنید. این روش به شما امکان می‌دهد که کنترل بیشتری بر روی فرآیند تایید ایمیل کاربران خود داشته باشید و از امکانات django-allauth استفاده کنید که شامل قابلیت‌هایی مانند تنظیمات ارسال ایمیل، قالب‌های ایمیل سفارشی، تنظیمات لینک‌های تأیید و موارد دیگر است.اگر قسمتی از کد نامفهوم بود میتونید در ایمیل بگید یا اگه نخواستید ایمیل بزنید میتونی چت جی پی تی اون قطعه از کد رو ارسال کنید و ازش بخواید براتون توضیح بده.aranjbar1372@gmail.com</description>
                <category>Ali Ranjbar</category>
                <author>Ali Ranjbar</author>
                <pubDate>Tue, 30 May 2023 00:14:53 +0330</pubDate>
            </item>
                    <item>
                <title>حل یکی از مشکلات در paginate کردن صفحات در جنگو</title>
                <link>https://virgool.io/@aranjbar1372/%D8%AD%D9%84-%DB%8C%DA%A9%DB%8C-%D8%A7%D8%B2-%D9%85%D8%B4%DA%A9%D9%84%D8%A7%D8%AA-%D8%AF%D8%B1-paginate-%DA%A9%D8%B1%D8%AF%D9%86-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%AF%D8%B1-%D8%AC%D9%86%DA%AF%D9%88-q83fh1zincsj</link>
                <description>یکی از مشکلاتی که در paginate کردن صفحات جنگو به صورت عددی هست اینه که مثلا شما یه لیست رو در تمپلیت برمیگردونی و در انتهای صفحه چند عدد قرار میدی که نشون میده باید کاربر برای دیدن ادامه مطالب به صفحات بعد مراجعه کنه و بعد کاربر روی صفحه دو میزنه و بعد سه و الی آخر... حالا اگه تعداد پستهای ما زیاد بشه چی کار باید کرد؟ چون اینجوری باعث میشه تعداد خیلی زیادی از عدد صفحات به نمایش در بیاد( مثلا از 1 تا 500)الان اگه تعداد پستای ما هزارتا بشه تقریبا از عدد یک تا 350 به نمایش در میاد برای صفحاتخب حالا راه حل چیه؟توی تمپلیت از کد زیر باید استفاده کرد...{% if is_paginated %}&lt;ul class=&quot;pagination&quot;&gt;{% if page_obj.has_previous %}&lt;li&gt;&lt;a href=&quot;{% url &#x27;payments:charge_list&#x27; page_obj.previous_page_number %}&quot;&gt;&amp;laquo;&lt;/a&gt;&lt;/li&gt;{% else %}&lt;li class=&quot;disabled&quot;&gt;&lt;span&gt;&amp;laquo;&lt;/span&gt;&lt;/li&gt;{% endif %}{% for i in paginator.page_range %}{% if page_obj.number == i %}&lt;li class=&quot;active&quot;&gt;&lt;span&gt;{{ i }} &lt;span class=&quot;sr-only&quot;&gt;(current)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;{% elif i &gt; page_obj.number|add:&#x27;-3&#x27; and i &lt; page_obj.number|add:&#x27;3&#x27; %}&lt;li&gt;&lt;a href=&quot;{% url &#x27;payments:charge_list&#x27; i %}&quot;&gt;{{ i }}&lt;/a&gt;&lt;/li&gt;{% endif %}{% endfor %}{% if page_obj.has_next %}&lt;li&gt;&lt;a href=&quot;{% url &#x27;payments:charge_list&#x27; page_obj.next_page_number %}&quot;&gt;&amp;raquo;&lt;/a&gt;&lt;/li&gt;{% else %}&lt;li class=&quot;disabled&quot;&gt;&lt;span&gt;&amp;raquo;&lt;/span&gt;&lt;/li&gt;{% endif %}&lt;/ul&gt;{% endif %}نکته اصلی توی این قسمته:{% elif i &gt; page_obj.number|add:&#x27;-3&#x27; and i &lt; page_obj.number|add:&#x27;3&#x27; %}این کار باعث میشه فقط دو عدد صحه قبل و دو عدد صفحه بعد نمایش داده بشه یعنی به این شکل:راه حل های دیگری هم هست که خوشحال میشم اونارو در کامنت با من در میون بزارید.</description>
                <category>Ali Ranjbar</category>
                <author>Ali Ranjbar</author>
                <pubDate>Tue, 15 Sep 2020 11:18:53 +0430</pubDate>
            </item>
            </channel>
</rss>