目的
- とにかくやりきることが一番の目的
- 毎日発信することで、発信する習慣作り
- 個人開発をやりきることで、実績作り
開発するもの
X(旧Twitter)のパクリ
構成
python
django REST framework
本編
昨日までのものは中途半端だったため、再度作り直し。
Python環境に、venvにより仮想環境を構築します。
cd likeX
python -m venv venv
djangoをインストール
pip install django
pip install djangorestframework
djangoプロジェクトを作成
django-admin startproject likeX .
アプリを作成
cd likeX
django-admin startapp tweet
cd ..
マイグレーションを実行
python manage.py migrate
python manage.py createsuperuser --username admin --email admin@example.com
likeX/tweet/serializers.py
from django.contrib.auth.models import Group, User
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
likeX/tweet/views.py
from django.contrib.auth.models import Group, User
from rest_framework import permissions, viewsets
from .serializers import GroupSerializer, UserSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all().order_by('name')
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
likeX/urls.py
from django.urls import include, path
from rest_framework import routers
from likeX.tweet import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
likeX/settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
以下を修正
likeX/settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
起動
python manage.py runserver
APIを実行
以下コマンドで作成した、ユーザの情報が取れる
python manage.py createsuperuser --username admin --email admin@example.com
curl -u admin -H 'Accept: application/json; indent=4' http://127.0.0.1:8000/users/
Enter host password for user 'admin':
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin",
"email": "admin@example.com",
"groups": []
}
]
}
感想
ほぼチュートリアルどおり作成。
チュートリアル通り作成してるのに動かなかったりするのでちょっと困った。
かなり雑な記事になったので、後日整理。