سیستم احراز هویت داخلی جنگو – انجمن 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">
{% block title %}{% endblock %}
class="logo">Authentication
{% if request.user.is_authenticated %}
{% endif %}
class="user">
{% if request.user.is_authenticated %}
Hello {{ request.user.first_name|default:request.user.username }},
{% else %}
href="{% url 'accounts:login' %}">Log-in
{% endif %}
id="content">
{% block content %}
{% endblock %}
نحو 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
کاربرد.