大家好,我是Leo
今天我來介紹的是django rest framework,我今天會從使用者註冊開始講解
OK~~~ Let's go now!!!
還記得我們昨天已經將model寫完了,我們今天我們要來時做django framework API
以下是model的型式
以下連結是對API的概念作介紹
對不熟悉API的朋友也可以透過這支影片,更能清楚知道API是什麼?
https://www.youtube.com/watch?v=zvKadd9Cflc
API 重點整理
Django REST Framework 簡稱 DRF 是一個強大且彈性的工具。
GET : 取得我們想要的資料,常見url型式 https://www.google.com/search?q=apple
反斜線後面可以看到你所尋找的名字。
POST : 最常見之型式,常用於帳號密碼傳遞頁面,傳遞時網址沒有變化,像是寄實體信件,將寫好的信紙放入信封內,讓除了接收者外,看不出信封內的內容到底為何。
PUT : 修改(一筆資料),如果存在就覆蓋。
DELETE : 刪除資料。
models/users_models.py
from django.contrib.auth.models import User
from django.db import models
class Users(models.Model):
id = models.AutoField(primary_key=True)
auth_user = models.OneToOneField(User, on_delete=models.PROTECT,related_name='users')
tel = models.CharField(max_length=255, null=True)
language = models.IntegerField(default=1,null=True) # INT[null, note: '1:繁體中文']
title = models.CharField(max_length=255,null=True)
status = models.IntegerField(default=0) # INT[not null, note: '0:待認證 1:啟用 2:停用']
created_at = models.DateTimeField(auto_now_add = True,editable=False)
updated_at = models.DateTimeField(auto_now = True)
deleted_at = models.DateTimeField(null=True)
models/init
引用model內的檔案
from .users_model import *
views/users.py
當request.data 所有欄位與Serializer欄位一致時則創建使用者及使用者的token
from rest_framework import generics,permissions
from rest_framework.response import Response
from ..serializers import UsersSerializer
from rest_framework.authtoken.models import Token
class UsersAPIView(generics.GenericAPIView):
permission_classes = (permissions.AllowAny,)
authentication_classes = []
def post(self, request, *args):
serializer = UsersSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
user = serializer.save()
Token.objects.get_or_create(user=serializer.instance)
return Response({'success': True,
'id': user.id,
'username': user.username,
'message': "Account created successfully"},
status=201)
return Response({'success': False,
'message': ("Account repeat please change the other.")},
status=400)
views/init.py
引用model內的檔案
from .users import *
serializers/users_ser.py
from rest_framework import serializers
from django.contrib.auth.models import User
from rest_framework.validators import UniqueValidator
from django.contrib.auth.password_validation import validate_password
from website.models import Users
class UsersSerializer(serializers.ModelSerializer):
username = serializers.CharField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())],
) #比對username是否重複
password = serializers.CharField(write_only=True, required=True, validators=[validate_password],)
email = serializers.EmailField(write_only=True, required=True)
tel = serializers.CharField(write_only=True, required=False,allow_null=True)
first_name = serializers.CharField(write_only=True, required=False,allow_null=True)
last_name = serializers.CharField(write_only=True, required=False,allow_null=True)
class Meta:
model = User
fields = ('username', 'password', 'email', 'tel', 'first_name','last_name')
def create(self, validated_data): #創建 因為來自於User,Users的model
user = User(
username=validated_data['username'],
email=validated_data['email'],
password=validated_data['password'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
)
user.set_password(validated_data['password']) #加密
user.save()
users = Users.objects.create(
auth_user=user, #auth_user 為一對一關聯的欄位
tel=validated_data['tel']
)
users.save()
return user
serializers/init.py
引用serializer內的檔案
from .users_ser import *
階層圖
'|-- website',
' |-- apps.py',
' |-- forms.py',
' |-- __init__.py',
' |-- migrations',
' | |-- 0001_initial.py',
' | |-- __init__.py',
' |-- models',
' | |-- users_model.py',
' | |-- __init__.py',
' |-- serializers',
' | |-- users_ser.py',
' | |-- __init__.py',
' |-- views',
' | |-- users.py',
' | |-- __init__.py',
Postman 是一個模擬 HTTP Request 的使用工具,一些常見的 HTTP 的請求方式 GET、POST、PUT、DELETE,而它的功能是能夠快速的測試 API 是否能夠正常的請求資料,並返回正確的Response。
如果還未下載的捧油們,以下是下載連結
https://dl.pstmn.io/download/latest/win64
今天介紹的是使用者註冊,明天我預計從Serializers介紹一些概念與使用方法
我們明天見,各位掰掰~~~