Django開発をスムーズにする便利機能

# はじめに

はじめましてidavashです。OriginallyTeeというオリジナルTシャツの作成・購入・販売ができるネットショップ（以下ECサイト）の作成・運用をしています。

http://originally-tee.com/

今回はDjango開発時に必ず入れる便利機能を紹介します。随時更新予定です。

# Django Debug Toolbar
デバッグ用に使う。

SQLPanelは有用だが読み込み時間長くなるので、不要なときは以下のDEBUG_TOOLBAR_PANELS 設定でコメントアウトしましょう。

#### 設定
`$ pip install  django-debug-toolbar`

```python:settings.py
#...

INSTALLED_APPS = [
#...
'debug_toolbar', #追加
]

#...

MIDDLEWARE = [
    # ...
    "debug_toolbar.middleware.DebugToolbarMiddleware", #追加
]
# ...
INTERNAL_IPS = ['127.0.0.1',] #追加
# ...

# 必要な機能のみ表示するときは追加（デフォルトはすべて表示）
DEBUG_TOOLBAR_PANELS = [
    'debug_toolbar.panels.history.HistoryPanel',
    'debug_toolbar.panels.versions.VersionsPanel',
    'debug_toolbar.panels.timer.TimerPanel',
    'debug_toolbar.panels.settings.SettingsPanel',
    'debug_toolbar.panels.headers.HeadersPanel',
    'debug_toolbar.panels.request.RequestPanel',
    'debug_toolbar.panels.sql.SQLPanel',
    'debug_toolbar.panels.staticfiles.StaticFilesPanel',
    'debug_toolbar.panels.templates.TemplatesPanel',
    'debug_toolbar.panels.cache.CachePanel',
    'debug_toolbar.panels.signals.SignalsPanel',
    'debug_toolbar.panels.redirects.RedirectsPanel',
    'debug_toolbar.panels.profiling.ProfilingPanel',
]

```

```python:urls.py
#...
from debug_toolbar.toolbar import debug_toolbar_urls
#...
urlpatterns = [
    # ... 
] + debug_toolbar_urls()
```


# shell_plus

python manage.py shell　の機能を強化してくれる。作成したモデルや、その他の便利な機能を最初からimportしてくれる。

これが
```python:$ python manage.py shell
(InteractiveConsole)
>>> quit()
```

こんな風になります
```python:$ python mange.py shell_plus
# Shell Plus Model Imports
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.flatpages.models import FlatPage
from django.contrib.sessions.models import Session
from django.contrib.sites.models import Site
from oscar.apps.address.models import Country, UserAddress
from oscar.apps.analytics.models import ProductRecord, UserProductView, UserRecord, UserSearch
from oscar.apps.basket.models import Basket
from oscar.apps.wishlists.models import Line, WishList, WishListSharedEmail
from oscar.apps.order.models import BillingAddress, CommunicationEvent, LineAttribute, LinePrice, Order, OrderDiscount, OrderLineDiscount, OrderNote, OrderStatusChange, PaymentEvent, PaymentEventType, ShippingAddress, ShippingEvent, ShippingEventType, Surcharge
from oscar.apps.catalogue.models import AttributeOption, AttributeOptionGroup, Category, Option, ProductAttribute, ProductAttributeValue, ProductCategory, ProductClass, ProductImage, ProductRecommendation
from oscar.apps.catalogue.reviews.models import ProductReview, Vote
from oscar.apps.communication.models import CommunicationEventType, Email, Notification
from oscar.apps.customer.models import ProductAlert
from oscar.apps.offer.benefits import AbsoluteDiscountBenefit, FixedPriceBenefit, FixedUnitDiscountBenefit, MultibuyDiscountBenefit, PercentageDiscountBenefit, ShippingAbsoluteDiscountBenefit, ShippingBenefit, ShippingFixedPriceBenefit, ShippingPercentageDiscountBenefit
from oscar.apps.offer.conditions import CountCondition, CoverageCondition, ValueCondition
from oscar.apps.offer.models import Benefit, Condition, ConditionalOffer, Range, RangeProduct, RangeProductFileUpload
from oscar.apps.order.abstract_models import PaymentEventQuantity, ShippingEventQuantity
from oscar.apps.partner.models import Partner, PartnerAddress, StockAlert, StockRecord
from oscar.apps.payment.models import Bankcard, Source, SourceType, Transaction
from oscar.apps.shipping.models import OrderAndItemCharges, WeightBand, WeightBased
from oscar.apps.voucher.models import Voucher, VoucherApplication, VoucherSet
from sorl.thumbnail.models import KVStore
from yourappsfolder.catalogue.models import Product
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When
from django.utils import timezone
from django.urls import reverse
from django.db.models import Exists, OuterRef, Subquery
(InteractiveConsole)
>>>
```

#### 設定
`$ pip install django_extensions`

django_extensionsには他にも機能あるので、気になる方は調べてみてください。

```python:settings.py
INSTALLED_APPS = [
#...
    'django_extensions', #追加
]
```
後はコンソールで
`$ python manage.py shell_plus` とすればOK

# (vscode拡張機能) Django
インポート文
`from ~~ import ~~`
テンプレート内のリンク
`{% extends "" %}や{% include "" %}`
をctrl+クリックでそのファイルに移動できます。

他にもいろいろな機能があります。

#### 設定
vscodeで「表示」>「拡張機能」からDjangoを検索して、インストール

# (vscode拡張機能) Djaneiro 
Django用のコード補完です。例えばcharと入力すると、以下のように補完してくれます。

```python:models.py
models.CharField(_(""), max_length=50)
```

#### 設定
vscodeで「表示」>「拡張機能」からDjaneiroを検索して、インストール

# 終わりに

**新たに発見したら更新する予定です**

django-oscarでECサイトを構築する記事を書いてます

https://qiita.com/idavash/items/694a04fef6c22b9a0e26

https://qiita.com/idavash/items/10bbf98872a1c7161f1e

https://qiita.com/idavash/items/b42748cfeefd95d0b6b1