LoginSignup
0
0

More than 1 year has passed since last update.

Django REST APIを一般公開しています。

Posted at

PythonのウェブフレームワークDjangoで作成したREST APIを公開したので是非使ってみてください。
自由にCRUD作業してOKです。今のところはリクエスト数に制限もありません。
http://172.104.81.40/api/

ただし1時間ごとにDBがデフォルトに戻るので入力されたデータは削除されることになります。

良かったら自分でホスティングしているサイトとYouTubeがあるので他の記事も見てみてください。

APIの概要

このAPIはコールセンターをイメージしたDBを構成し、CRUD操作(Create,Read,Update,Delete)を可能にしたAPIです。

もう一つにトークン認証でログインしたユーザーのみアクセスできるAPIも別に公開しています。
そちらは、81番ポートからアクセスしてください。今回はトークン認証の不要なAPIのみ紹介します。

利用可能なAPI

このURL(URI)にアクセスすると、下記のように各URLからAPIにアクセスできます。

"office": "http://172.104.81.40/api/office/",
"staff": "http://172.104.81.40/api/staff/",
"tickets": "http://172.104.81.40/api/tickets/",
"ticket-categories": "http://172.104.81.40/api/ticket-categories/",
"company": "http://172.104.81.40/api/company/",
"store": "http://172.104.81.40/api/store/",
"customer-contact": "http://172.104.81.40/api/customer-contact/"

Office:オフィス情報のAPIです。

Staff:従業員のAPIです。Officeの情報が紐づいています。

Tickets:お客様からのコール情報に他のテーブル(スタッフ、店舗情報、チケットカテゴリ)が紐づいています。

Ticket-Categories:コールのカテゴリ情報です。

Company:企業情報です。

StoreS:各企業の店舗情報です。

Customer-contact:お客様の連絡先です。

Djangoセットアップの手順

下記のURLにソースコードがアップロードされているので自由にクローンして使ってください。

Gitを使ってクローンからセットアップまでの手順です。

git clone https://github.com/TraitOtaku/Django-TicketAppAPI.git

cd Django-TicketAppAPI
virtualenv env
bin\Scripts\activate

pip install -r requirements.txt

python manage.py makemigrations
python manage.py migrate

python manage.py createsuperuser

python manage.py runserver

モデルの内容

各アプリのmodels.pyを参照して受け入れるデータタイプとデータが必須かどうかを確認してください。

blank=True, null=Trueの場合はデータがなしでもOKです。

class Ticket(models.Model):
    category = models.ForeignKey(
        TicketCategory, on_delete=models.PROTECT, related_name="category_name")
    created_by = models.ForeignKey(
        'members.Member', on_delete=models.PROTECT, blank=True, null=True, default=None, related_name='ticket_created_by')
    updated_by = models.ForeignKey(
        'members.Member', on_delete=models.PROTECT, blank=True, null=True, default=None, related_name='ticket_updated_by') 
    ticket_date = models.DateTimeField(blank=True, null=True)

    is_open = models.BooleanField(default=False)
    is_email = models.BooleanField(default=False)
    complete_by = models.DateField(blank=True, null=True)
    open_details = models.CharField(max_length=100, null=True, blank=True)

    inquiry = models.CharField(max_length=1000)
    respond = models.CharField(max_length=1000)

    # Custromer Info
    company = models.ForeignKey(Company, on_delete=models.PROTECT, blank=True, null=True)
    store = models.ForeignKey(Store, on_delete=models.PROTECT, blank=True, null=True)

    is_contact = models.BooleanField(default=False)
    contact = models.ForeignKey(CustomerContact, on_delete=models.PROTECT, blank=True, null=True)

    contact_name = models.CharField(max_length=100, blank=True, null=True)
    email = models.EmailField(max_length=100, blank=True, null=True)
    phone = models.CharField(max_length=100, blank=True, null=True)

シリアライザーの内容

各アプリのSerializers.pyが先ほどのDBとコミュニケーションをとるmodels.pyをシリアル化してAPIの役目をします。チケットの例でいうとReadのGETリクエストが来たときとその他のリクエストで別々のリスポンスを返すようにしています。その設定はViews.pyで行いますが、APIの内容はここで決めます。

class TicketSerializer(serializers.ModelSerializer):
    # ticket_date = serializers.DateTimeField()
    ticket_date = serializers.DateTimeField(
        format="%m/%d/%Y %H:%M", input_formats=["%m/%d/%Y %H:%M"])

    # complete_by = serializers.DateField(allow_null=True)
    # complete_by = serializers.DateField(
    #     format="%m/%d/%Y", allow_null=True)
    complete_by = serializers.DateField(
        format="%m/%d/%Y", input_formats=["%m/%d/%Y"], allow_null=True)
    class Meta:
        model = Ticket
        fields = '__all__'
        # depth = 1

class TicketReadSerializer(TicketSerializer):
    category = CategorySerializer(read_only=True)
    updated_by = MemberSerializer(read_only=True)
    created_by = MemberSerializer(read_only=True)
    escalated_to = MemberSerializer(read_only=True)
    contact = CustomerContactReadSerializer(read_only=True)
    store = StoreSerializer(read_only=True)
    company = CompanySerializer(read_only=True)

UIからデータを操作してみる

では、実際にDjangoのAPIのUIを使用してデータを操作してみましょう。

{
    "ticket_date": "01/01/2022 21:15",
    "complete_by": null,
    "is_open": false,
    "is_email": false,
    "open_details": "",
    "inquiry": "新しいパソコンが欲しい",
    "respond": "しょうがないね",
    "is_contact": false,
    "contact_name": "",
    "email": "okyakusama@ichiban.com",
    "phone": "123-123-123",
    "category": 1,
    "created_by": 1,
    "updated_by": null,
    "company": null,
    "store": 1,
    "contact": null
}

上記のJSONデータを入れてあげると、DjangoからAcceptのリスポンスが返されてデータが追加されました。

レコードの更新と削除

先ほど作成したレコードはIDが1で作成されました。このデータにアクセスするには下記のようにURLの最後にIDを追加すればOKです。

そうするとDELETEのオプションと下記にPUTとPATCHのオプションが追加されるのでそこからレコードを削除するなり修正するなりできます。

同じ記事はこちらかも見れます。
https://asameshicode.com/django-rest-api-demo/
お疲れ様でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0