Skip to main content

یک ویرایشگر متن فارسی پیشرفته برای Django با پشتیبانی از RTL، حالت تاریک و امنیت بالا

Project description

ویرایشگر متن فارسی برای جنگو (Persian Editor for Django)

ویرایشگر متن پیشرفته فارسی برای جنگو

یک ویرایشگر متن غنی (WYSIWYG) با پشتیبانی کامل از زبان فارسی برای فریم‌ورک جنگو

Python Django License RTL Support

ویژگی‌ها

پشتیبانی کامل از راست به چپ (RTL) - طراحی شده به صورت اختصاصی برای زبان فارسی
🎨 رابط کاربری مدرن - ظاهری زیبا و کاربرپسند با پشتیبانی از حالت تاریک
📱 واکنش‌گرا - سازگار با تمام دستگاه‌ها از موبایل تا دسکتاپ
🔌 ادغام آسان - نصب و پیکربندی ساده در پروژه‌های جنگو
🛠️ قابلیت‌های پیشرفته - قالب‌بندی متن، درج لینک، تصویر، جدول و...
🔊 افکت‌های صوتی - صدای تایپ برای تجربه کاربری بهتر
🌙 حالت تاریک - پشتیبانی از حالت تاریک برای کار در محیط‌های کم‌نور
💾 ذخیره خودکار - ذخیره محتوا به صورت خودکار برای جلوگیری از از دست رفتن اطلاعات

نصب

۱. نصب با استفاده از pip

pip install django-persian-editor

۲. اضافه کردن به INSTALLED_APPS

در فایل settings.py پروژه خود، persian_editor را به لیست INSTALLED_APPS اضافه کنید:

INSTALLED_APPS = [
    # ...
    'persian_editor',
    # ...
]

۳. اضافه کردن URL‌ها

در فایل urls.py پروژه خود، URL‌های ویرایشگر را اضافه کنید:

from django.urls import path, include

urlpatterns = [
    # ...
    path('persian-editor/', include('persian_editor.urls')),
    # ...
]

۴. تنظیمات رسانه (Media)

برای آپلود تصاویر، مطمئن شوید که تنظیمات رسانه به درستی پیکربندی شده‌اند:

# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

و در فایل urls.py اصلی:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

۵. اجرای مایگریشن‌ها

python manage.py migrate

استفاده

استفاده در فرم‌ها

from django import forms
from persian_editor.widgets import PersianEditorWidget

class ArticleForm(forms.Form):
    title = forms.CharField(max_length=100)
    content = forms.CharField(widget=PersianEditorWidget())

استفاده در مدل‌ها

from django.db import models
from persian_editor.fields import PersianEditorField

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = PersianEditorField()

استفاده در ادمین جنگو

from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'created_at')
    search_fields = ('title', 'content')

شخصی‌سازی

تنظیمات پیش‌فرض

می‌توانید تنظیمات پیش‌فرض ویرایشگر را در فایل settings.py خود تغییر دهید:

# تنظیمات ویرایشگر فارسی
PERSIAN_EDITOR_CONFIG = {
    'height': '400px',
    'toolbar_buttons': [
        'bold', 'italic', 'underline', 'strikeThrough',
        'justifyRight', 'justifyCenter', 'justifyLeft', 'justifyFull',
        'insertUnorderedList', 'insertOrderedList',
        'link', 'image', 'table', 'html', 'fullscreen'
    ],
    'enable_sound': True,
    'enable_autosave': True,
    'autosave_interval': 60000,  # میلی‌ثانیه
    'enable_dark_mode': True,
    'default_direction': 'rtl',
    'upload_image_path': 'persian_editor/uploads/',
}

شخصی‌سازی ویجت

می‌توانید تنظیمات را به صورت موردی برای هر ویجت تغییر دهید:

from persian_editor.widgets import PersianEditorWidget

content = forms.CharField(
    widget=PersianEditorWidget(
        config={
            'height': '300px',
            'enable_sound': False,
            'toolbar_buttons': ['bold', 'italic', 'link']
        }
    )
)

رویدادها و API جاوااسکریپت

ویرایشگر فارسی دارای API جاوااسکریپت قدرتمندی است که می‌توانید از آن برای تعامل با ویرایشگر استفاده کنید:

// دسترسی به نمونه ویرایشگر
const editor = PersianEditor.getInstance('element_id');

// دریافت محتوا
const content = editor.getContent();

// تنظیم محتوا
editor.setContent('<p>محتوای جدید</p>');

// افزودن محتوا به انتهای متن
editor.appendContent('<p>متن اضافه شده</p>');

// پاک کردن محتوا
editor.clear();

// فعال/غیرفعال کردن ویرایشگر
editor.enable();
editor.disable();

// گوش دادن به رویدادها
editor.on('change', function(content) {
    console.log('محتوا تغییر کرد:', content);
});

editor.on('focus', function() {
    console.log('ویرایشگر فوکوس شد');
});

editor.on('blur', function() {
    console.log('ویرایشگر فوکوس را از دست داد');
});

رویدادهای سفارشی

می‌توانید رویدادهای سفارشی را برای ویرایشگر تعریف کنید:

// تعریف یک رویداد سفارشی
PersianEditor.defineEvent('customEvent', function(editor, data) {
    // پیاده‌سازی رویداد
});

// فراخوانی رویداد سفارشی
editor.trigger('customEvent', { key: 'value' });

افزونه‌ها

ویرایشگر فارسی از سیستم افزونه پشتیبانی می‌کند. می‌توانید افزونه‌های خود را به شکل زیر ایجاد کنید:

// تعریف یک افزونه
PersianEditor.definePlugin('myPlugin', {
    init: function(editor) {
        // مقداردهی اولیه افزونه
        console.log('افزونه من فعال شد');
        
        // افزودن دکمه به نوار ابزار
        editor.addToolbarButton({
            name: 'myButton',
            icon: 'bi bi-star',
            title: 'دکمه سفارشی',
            action: function() {
                alert('دکمه سفارشی کلیک شد!');
            }
        });
    },
    
    destroy: function(editor) {
        // پاکسازی منابع هنگام حذف افزونه
    }
});

// فعال‌سازی افزونه
PersianEditor.activatePlugin('myPlugin');

مثال‌ها

مثال ۱: فرم ساده با ویرایشگر فارسی

# forms.py
from django import forms
from persian_editor.widgets import PersianEditorWidget

class SimpleForm(forms.Form):
    content = forms.CharField(widget=PersianEditorWidget())

# views.py
from django.shortcuts import render, redirect
from .forms import SimpleForm

def simple_form_view(request):
    if request.method == 'POST':
        form = SimpleForm(request.POST)
        if form.is_valid():
            # پردازش داده‌ها
            return redirect('success')
    else:
        form = SimpleForm()
    
    return render(request, 'simple_form.html', {'form': form})

# simple_form.html
{% extends 'base.html' %}

{% block content %}
<h1>فرم ساده</h1>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">ارسال</button>
</form>
{% endblock %}

مثال ۲: استفاده در مدل و ادمین

# models.py
from django.db import models
from persian_editor.fields import PersianEditorField

class Article(models.Model):
    title = models.CharField(max_length=100, verbose_name='عنوان')
    content = PersianEditorField(verbose_name='محتوا')
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')
    
    def __str__(self):
        return self.title
    
    class Meta:
        verbose_name = 'مقاله'
        verbose_name_plural = 'مقالات'

# admin.py
from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'created_at')
    search_fields = ('title', 'content')

امنیت

ویرایشگر فارسی با در نظر گرفتن امنیت طراحی شده است و شامل ویژگی‌های امنیتی زیر است:

پاکسازی HTML

برای جلوگیری از حملات XSS، ویرایشگر فارسی به طور خودکار محتوای HTML را پاکسازی می‌کند:

from persian_editor.security import clean_html

# پاکسازی محتوای HTML
cleaned_content = clean_html(content)

امنیت آپلود فایل

برای اطمینان از امنیت آپلود فایل‌ها، ویرایشگر فارسی از بررسی‌های امنیتی زیر استفاده می‌کند:

from persian_editor.security import validate_image_file

# بررسی امنیتی فایل تصویر
validate_image_file(uploaded_file)

هدرهای امنیتی

برای بهبود امنیت، ویرایشگر فارسی هدرهای امنیتی مانند Content-Security-Policy را اضافه می‌کند:

# اضافه کردن میدل‌ور امنیتی
MIDDLEWARE = [
    # ...
    'persian_editor.middleware.SecurityHeadersMiddleware',
    # ...
]

برای اطلاعات بیشتر در مورد امنیت، به فایل SECURITY.md مراجعه کنید.

حالت تاریک

ویرایشگر فارسی به طور خودکار از حالت تاریک پشتیبانی می‌کند و با تنظیمات سیستم کاربر هماهنگ می‌شود:

@media (prefers-color-scheme: dark) {
    .persian-editor {
        background-color: #2d2d2d;
        color: #f0f0f0;
    }
    
    .persian-editor-toolbar {
        background-color: #333;
        border-color: #444;
    }
    
    /* سایر استایل‌های حالت تاریک */
}

واکنش‌گرایی

ویرایشگر فارسی برای استفاده در دستگاه‌های موبایل بهینه‌سازی شده است:

@media (max-width: 768px) {
    .persian-editor-toolbar {
        flex-wrap: wrap;
    }
    
    .persian-editor-toolbar button {
        padding: 6px;
    }
    
    /* سایر استایل‌های واکنش‌گرا */
}

انتشار در PyPI

برای انتشار ویرایشگر فارسی در PyPI، مراحل زیر را دنبال کنید:

# نصب ابزارهای لازم
pip install setuptools wheel twine

# ساخت بسته توزیع
python setup.py sdist bdist_wheel

# آپلود به PyPI
twine upload dist/*

مشارکت

از مشارکت شما در توسعه ویرایشگر فارسی استقبال می‌کنیم! برای مشارکت، مراحل زیر را دنبال کنید:

  1. پروژه را فورک کنید
  2. یک شاخه جدید ایجاد کنید (git checkout -b feature/amazing-feature)
  3. تغییرات خود را کامیت کنید (git commit -m 'Add some amazing feature')
  4. شاخه را به مخزن خود پوش کنید (git push origin feature/amazing-feature)
  5. یک Pull Request ایجاد کنید

مجوز

این پروژه تحت مجوز MIT منتشر شده است. برای اطلاعات بیشتر، به فایل LICENSE مراجعه کنید.

تماس با ما

اگر سوال یا پیشنهادی دارید، می‌توانید از طریق ایمیل یا GitHub با ما در تماس باشید:


با افتخار ساخته شده در ایران ❤️

Persian Editor for Django © 2025

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_persian_editor-1.0.0.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_persian_editor-1.0.0-py2.py3-none-any.whl (34.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django_persian_editor-1.0.0.tar.gz.

File metadata

  • Download URL: django_persian_editor-1.0.0.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for django_persian_editor-1.0.0.tar.gz
Algorithm Hash digest
SHA256 75f4608b518494b006df9632bebe1adf2660985107e49e6f6957d685a95d07f3
MD5 9fe8117aaec7904f835f6dca278222db
BLAKE2b-256 71dfd33abd8f8f389d52cee5abc4aec65a7bfbc3a1e847f8bab49db6438dd587

See more details on using hashes here.

File details

Details for the file django_persian_editor-1.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_persian_editor-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8e5a6f14b3622112a6ee2f09ee5be5b6bc7a8e1ae6dcc171f2b68d894593ba89
MD5 44995e55d97aa6df5408654f47d1adb9
BLAKE2b-256 affc6d17df317db3a82c2fe634a446cd2cb273fe4ee746bea7d64105401f8f3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page