Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/salexkidd/django-user-g11n
Django User g11n (globalization) provides fields for users to set time zones and regions, as well as middleware to handle them properly.
https://github.com/salexkidd/django-user-g11n
django g11n middleware
Last synced: about 2 months ago
JSON representation
Django User g11n (globalization) provides fields for users to set time zones and regions, as well as middleware to handle them properly.
- Host: GitHub
- URL: https://github.com/salexkidd/django-user-g11n
- Owner: salexkidd
- License: mit
- Created: 2020-05-04T00:43:27.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-06-06T05:22:26.000Z (8 months ago)
- Last Synced: 2024-12-07T03:39:50.788Z (about 2 months ago)
- Topics: django, g11n, middleware
- Language: Python
- Homepage: https://github.com/salexkidd/django-user-g11n
- Size: 70.3 KB
- Stars: 25
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE
Awesome Lists containing this project
README
Django User g11n
=========================================================================================[![CircleCI](https://circleci.com/gh/salexkidd/django-user-g11n/tree/master.svg?style=svg)](https://circleci.com/gh/salexkidd/django-user-g11n/tree/master)
Djangoは *i18n* 及び *l10n* に対応しています。しかし、デフォルトの機能としてユーザーのタイムゾーン及び地域を設定する項目は存在しません。
Django User g11n (*globalization*)は、ユーザーにタイムゾーンと地域を設定するためのフィールドと、それらを適切に扱うためのミドルウェアを提供します。
根底のアイディアは以下のURLを参照してください。
[See the Django documentation for more information](https://stackoverflow.com/questions/10235956/django-1-4-how-to-automatically-get-users-timezone-from-client)
- Support Django 2 and 3
- Support Python3.7, 3.8 (Maybe 2.7. Not tested)# インストール方法
pypiからパッケージをインストールします
```shell
$ pip install django-user-g11n
```次に実装方法を以下の2つから選択します。
- プロファイルモデルを利用している場合
- カスタムユーザーモデルを利用している場合プロファイルモデルはDjangoのユーザーモデルと *OneToOneField* で結びついている、ユーザーにまつわる情報を扱うモデルを指します。もし、既にこの方式で実装を勧めている場合は *プロファイルモデルを利用している場合* を参照してください。
カスタムユーザーモデルは、Djangoのユーザーモデルそのものを拡張してデータをもたせる方法です。ユーザーをカスタムモデルを利用するためにはアプリケーションを作成し、モデルをカスタマイズします。[詳細はDjangoのドキュメントを参照してください](https://docs.djangoproject.com/en/3.0/topics/auth/customizing/)
## プロファイルモデルを利用する場合
プロファイルモデルを扱うアプリケーションを作成します。
```
$ manage.py startapp accounts作成したアプリケーションのmodels.pyに以下を追記します。
```python
from django.db import models
from user_g11n.models import UserLanguageSupportMixin, UserTimeZoneSupportMixinclass UserProfile(UserTimeZoneSupportMixin,
UserLanguageSupportMixin,
models.Model):user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="profile",
)
```## カスタムユーザーモデルを利用する場合
Djangoはカスタムユーザーモデルを用意し、Django標準のものを拡張することが可能です。
```
$ manage.py startapp accounts
```作成したアプリケーションのmodels.pyに以下を追記します。
```python
from django.contrib.auth import models as auth_models
from user_g11n.models import UserLanguageSupportMixin, UserTimeZoneSupportMixinclass User(UserTimeZoneSupportMixin,
UserLanguageSupportMixin,
auth_models.AbstractUser):
pass
```## settings.py
### INSTALLED_APPS
INSTALLED_APPSにユーザー拡張を施したアプリケーションと、user_g11n を追加します。
```python
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
.
.
.
'accounts', # <= ユーザー拡張用のモデルを含んだアプリケーション
'user_g11n', # <= 追加
)
```### MIDDLEWARE
MIDDLEWARE(またはMIDDLEWARE_CLASSES)にミドルウェアを追加します。
```python
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
.
.
.
'user_g11n.middleware.UserLanguageMiddleware', # <= 追加
'user_g11n.middleware.UserTimeZoneMiddleware', # <= 追加
]
```### AUTH_USER_MODELの変更
AUTH_USER_MODELを変更または追加します。
```python
AUTH_USER_MODEL = 'accounts.User'
```### I18N, L10N & TIME_ZONEの設定
I18N, L10N, TZの設定を変更します。
```python
USE_I18N = TrueUSE_L10N = True
USE_TZ = True
TIME_ZONE = "Asia/Tokyo" # Change to your local timezone
```## プロファイルモデルを利用している場合(プロファイルアトリビュートの指定)
ユーザーモデルに紐付いたプロファイルモデルのアトリビュート名を設定します。
```
USER_G11N_USERPROFILE_ATTRIBUTE_NAME = "profile"
```もしプロファイルモデルで指定したユーザーモデルへのOneToOneField中にて、related_nameが "foobar" になっていれば、ここの値を以下のようにします。
```
USER_G11N_USERPROFILE_ATTRIBUTE_NAME = "foobar"
```## migrate
Migrationを行い変更を適応します。
```
$ ./manage.py migrate
```# Demo
Dockerの設定を用意しています。以下のコマンドを用いて起動してください。起動が完了したら [http://localhost:8000](http://localhost:8000) にアクセスしてください。
```
$ docker-compose up
```