برنامه نویسی

سیستم احراز هویت داخلی جنگو – انجمن DEV

مقدمه:

در این مقاله به شما توضیح خواهم داد که چگونه یک پروژه جنگو ساده با فرآیند احراز هویت اولیه ورود و خروج از سیستم ایجاد کنید. جنگو دارای سیستم های احراز هویت داخلی و نماهای داخلی است که می توانید از آنها برای ایجاد سریع و آسان احراز هویت کاربر با استفاده از قالب های خود استفاده کنید.

پروژه جنگو را ایجاد کنید:

یک پروژه جدید در IDE یا ترمینال خود ایجاد کنید و به پوشه ای که ایجاد کرده اید بروید. یک محیط مجازی ایجاد کنید.

اکنون وابستگی ها را در محیط مجازی خود نصب کنید:

pip install django python-decouple ipyhton
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

می توانید چندین وابستگی را با هم زنجیره بزنید. شما جنگو را برای پروژه خود نصب می کنید. python-decouple است برای .env فایلی که در آن همه متغیرهای محیط مخفی خود مانند SECRET_KEY یا تمام تنظیمات ایمیل و غیره و ipython ابزار خوبی برای پوسته است.

پس از اینکه وابستگی های خود را با موفقیت نصب کردید، آنها را در یک فایل در پوشه اصلی ذخیره کنید:

pip freeze > requirements.txt
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

pip freeze تمام وابستگی ها را در ترمینال لیست می کند
> requirements.txt این همه وابستگی های نصب شده را در فایلی به نام ذخیره می کند requirements.txt یا فایل را ایجاد کنید

اکنون پروژه جنگو خود را در محیط مجازی با استفاده از:

django-admin startproject authentication .
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را . پس از نام پروژه شما این است که دایرکتوری پروژه جنگو را در داخل دایرکتوری ریشه ایجاد کنید.

پس از اینکه اولین برنامه خود را در پروژه جنگو ایجاد کردید:

python manage.py startapp accounts
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برنامه باید به آن اضافه شود INSTALLED_APPS در settings.py فایل داخل authentication دایرکتوری پروژه

# authentication/settings.py

# Application definition
INSTALLED_APPS = [
    "accounts",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر می خواهید الگوهای احراز هویت سفارشی خود را ایجاد کنید، باید مطمئن شوید که برنامه ایجاد شده شما accounts قبل از قرار می گیرد "django.contrib.admin" کاربرد.


از امنیت پروژه خود اطمینان حاصل کنید:

برای اطمینان از امنیت پروژه خود، باید آن را ذخیره کنید SECRET_KEY، DEBUG، ALLOWED_HOSTSو غیره در محلی ذخیره شده است .env فایل

دستور بالا را در ترمینال خود وارد کنید تا امن ایجاد شود SECRET_KEY:

python manage.py shell -c 'from django.core.management import utils; print(utils.get_random_secret_key())'
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد کنید .env در دایرکتوری ریشه قرار دهید و اضافه کنید:

# general project variables:
SECRET_KEY="r^=cy=8w8$^p)!gd6#%*c)s-u4h!ua9r6!i317qt^6l47)94t^"
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اینکه بتوانید سرور توسعه خود را راه اندازی کنید، باید به متغیرهای پروژه مانند the دسترسی داشته باشید SECRET_KEY. شما باید مطمئن شوید که شما settings.py فایل به متغیرهای محیط ذخیره شده در دسترسی دارد .env فایل

مرحله اول با نصب انجام شده است python-decouple. اکنون به روز رسانی کنید settings.py فایل:

# authentication/settings.py

from decouple import config


# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = config("SECRET_KEY")

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = config("DEBUG")

ALLOWED_HOSTS = config("ALLOWED_HOSTS", default="").split(",")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ALLOWED_HOSTS باید یک لیست باشد ما مقدار را به عنوان یک رشته جدا شده با کاما در قسمت ذخیره کرده ایم .env فایل در داخل settings.py در فایل، رشته های جدا شده با کاما را در قسمت تقسیم می کنیم , و یک لیست از آنها ایجاد کنید.

فایل بعدی که باید ایجاد کنید فایل است .gitignore فایل، برای جلوگیری از ارسال متغیرهای محیطی خود به GitHub یا GitLab.

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# Django stuff:
*.log
*.pot
*.pyc

# virtual environment
.venv

# IDE
.idea

# Local configuration
.env
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این .gitignore فایل فقط یک مثال است، بسته به IDE شما ممکن است فایل شما متفاوت به نظر برسد.


ایجاد یک مدل کاربر:

استفاده از آن تمرین خوبی است AbstractUser برای ایجاد مدل کاربری خود:

# accounts/models.py

from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    pass
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در صورت لزوم، می توانید ویژگی های اضافی را در داخل آن اضافه کنید User کلاس

مرحله بعدی اضافه کردن User مدل به پنل مدیریت به این ترتیب می توانید به راحتی ایجاد کنید User نمونه هایی از پنل مدیریت شما همچنین می توانید ایجاد کنید User نمونه هایی در پوسته پایتون

# accounts/models.py

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

UserModel = get_user_model()

admin.site.register(UserModel, UserAdmin)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در settings.py فایل را باید تنظیم کنیم User ما ایجاد کردیم تا به پروژه بگوییم که می خواهیم از سفارشی خود استفاده کنیم User مدل

# authentication/settings.py

# set the User
AUTH_USER_MODEL = "accounts.User"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دستورات بعدی فایل مهاجرت را در داخل ایجاد می کند accounts برنامه و جداول پایگاه داده در پایگاه داده SQLite ایجاد کنید.

python manage.py makemigrations
python manage.py migrate
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون زمان ایجاد یک کاربر ادمین در ترمینال است:

python manage.py createsuperuser

Username: Admin
Email address: admin@mail.com
Password: 
Password (again): 
Superuser created successfully.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این جزئیات احراز هویت را برای استفاده در آینده به خاطر بسپارید یا ذخیره کنید.


تنظیم URL های احراز هویت و ایجاد الگوهای احراز هویت سفارشی:

وقتی برنامه را اضافه کردیم، برنامه جدید قبلاً به پروژه اضافه شده بود accounts نام به INSTALLED_APPS لیست در settings.py، اما ما باید همه الگوهای آدرس اینترنتی آینده را از ادغام کنیم accounts برنامه در فایل URL پروژه:

# authentication/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path("accounts/", include("accounts.urls", namespace="accounts")),
]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما همه الگوهای url را درج خواهیم کرد accounts برنامه، که در زیر خواهد بود accounts فضای نام

در داخل accounts برنامه، یک فایل جدید به نام ایجاد کنید urls.py و موارد زیر را اضافه کنید:

# accounts/urls.py

from django.urls import path, include


app_name = "accounts"

urlpatterns = [
    path("", include("django.contrib.auth.urls")),
]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را app_name باید همان باشد namespace ویژگی در داخل path() عملکرد در احراز هویت urls.py فایل

اگر سرور توسعه را با:

python manage.py runserver
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و به آدرس URL بروید: http://127.0.0.1:8000/accounts/ شما به الگوهای URL زیر دسترسی خواهید داشت:

admin/
accounts/ login/ [name="login"]
accounts/ logout/ [name="logout"]
accounts/ password_change/ [name="password_change"]
accounts/ password_change/done/ [name="password_change_done"]
accounts/ password_reset/ [name="password_reset"]
accounts/ password_reset/done/ [name="password_reset_done"]
accounts/ reset/// [name="password_reset_confirm"]
accounts/ reset/done/ [name="password_reset_complete"]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید یک کاربر آزمایشی ایجاد کنیم و به آن بروید http://127.0.0.1:8000/admin/. را وارد کنید username در مثال من: Admin and the password شما با python manage.py createsuperuser فرمان

تحت عنوان ACCOUNTS می توانید جدید اضافه کنید user. شما نام کاربری، دو برابر رمز عبور را وارد کرده و آن را ذخیره می کنید. سپس باید اطلاعات اضافی مانند نام و نام خانوادگی و آدرس ایمیل را وارد کرده و دوباره ذخیره کنید.


نمای ورود و خروج:

اولین قالبی که ما ایجاد خواهیم کرد این است base.html قالب در accounts کاربرد. ابتدا یک دایرکتوری در داخل ایجاد کنید accounts اپلیکیشنی به نام: templates و داخل templates دایرکتوری یک فایل به نام ایجاد کنید base.html:




 lang="en">

   charset="UTF-8">
  </span>{% block title %}{% endblock %}<span class="nt"/>
<span class="nt"/>
<span class="nt"/>
  <span class="nt"><div>
    <span class="nt"><span> <span class="na">class=</span><span class="s">"logo"</span><span class="nt">></span>Authentication<span class="nt"/></span>
      {% if request.user.is_authenticated %}
        <span class="nt"/>
      {% endif %}
    <span class="nt"><span> <span class="na">class=</span><span class="s">"user"</span><span class="nt">></span>
      {% if request.user.is_authenticated %}
        Hello {{ request.user.first_name|default:request.user.username }},
        <span class="nt"><form> <span class="na">action=</span><span class="s">"{% url 'accounts:logout' %}"</span> <span class="na">method=</span><span class="s">"post"</span><span class="nt">></span>
          <span class="nt"><button> <span class="na">type=</span><span class="s">"submit"</span><span class="nt">></span>Logout<span class="nt"/></button></span>
          {% csrf_token %}
        <span class="nt"/></form></span>
      {% else %}
        <span class="nt"><a> <span class="na">href=</span><span class="s">"{% url 'accounts:login' %}"</span><span class="nt">></span>Log-in<span class="nt"/></span>
      {% endif %}
    <span class="nt"/></span>
  <span class="nt"/></span></span></div></span>

  <span class="nt"><p> <span class="na">id=</span><span class="s">"content"</span><span class="nt">></span>
    {% block content %}
    {% endblock %}
  <span class="nt"/></p></span>
<span class="nt"/>
<span class="nt"/>
</span></span></code></pre>
<div class="highlight__panel js-actions-panel">
<div class="highlight__panel-action js-fullscreen-code-action">
    <svg xmlns="http://www.w3.org/2000/svg" width="20px" height="20px" viewbox="0 0 24 24" class="highlight-action crayons-icon highlight-action--fullscreen-on"><title>وارد حالت تمام صفحه شوید
    

از حالت تمام صفحه خارج شوید

نحو URL در مورد من همیشه نام برنامه را دارد accounts قبل از نام URL، در غیر این صورت نام URL پیدا نخواهد شد. اگر URL احراز هویت در یک فضای نام است، نام برنامه باید اضافه شود.

ما سه الگوی اضافی ایجاد خواهیم کرد، یک الگوی ورود، یک الگوی loged_out و یک الگو پس از اینکه کاربر با موفقیت وارد سیستم شد، یک داشبورد.



{% extends "base.html" %}

{% block title %}Log-in{% endblock %}

{% block content %}
  Log-in
  {% if form.errors %}
    
      Your username and password didn't match.
      Please try again.
    
  {% else %}
    
      Please, use the following form to log-in.

    
  {% endif %}
  
{% endblock %}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید



{% extends "base.html" %}

{% block title %}Logged out{% endblock %}

{% block content %}
  Logged out
  
    You have been successfully logged out.
    You can  href="{% url 'accounts:login' %}">log-in again.
  
{% endblock %}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مطمئن شوید که از نام قالب استفاده می کنید: logged_out در غیر این صورت این الگو نادیده گرفته می شود.



{% extends "base.html" %}

{% block title %}Dashboard{% endblock %}

{% block content %}
  Dashboard
  Welcome to your dashboard.
{% endblock %}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنوز انجام نشده است. ما باید نمای و یک URL برای داشبورد ایجاد کنیم و چند متغیر را در آن تنظیم کنیم settings.py فایل

# accounts/views.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import render


@login_required
def dashboard(request):
    return render(request, "dashboard.html", {"section": "dashboard"})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فقط یک کاربر احراز هویت شده به این نما دسترسی دارد، ما از این موضوع اطمینان می‌دهیم login_required دکوراتور

# accounts/urls.py

from django.urls import path, include

from accounts.views import dashboard

app_name = "accounts"

urlpatterns = [
    path("", include("django.contrib.auth.urls")),
    path("", dashboard, name="dashboard"),
]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در settings.py فایل ما باید متغیری را تنظیم کنیم تا از تغییر مسیر پس از ورود به داشبورد URL خود اطمینان حاصل کنیم:

# authentication/settings.py

LOGIN_REDIRECT_URL = "accounts:dashboard"
LOGIN_URL = "login"
LOGOUT_URL = "logout"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را LOGIN_REDIRECT_URL منجر به الگوی URL داشبورد در داخل می شود accounts کاربرد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا