1. 程式人生 > 實用技巧 >測試平臺開發(三)後端實現註冊登入功能

測試平臺開發(三)後端實現註冊登入功能

一、建立使用者模組的應用

Django官網寫的是使用命令列執行python manage.py startapp [ApplicationName] 來建立應用,但使用工具會更方便而且還有智慧提示。

startapp users  # startapp:建立應用的關鍵字,users:為應用的名字

生成應用後一定要記得將應用名加入到settings.py檔案里名為INSTALLED_APPS的列表中,遵循規範加入到列表的最後,再新增應用也一樣

# settings.py
INSTALLED_APPS=[
  'users', ]

  

應用目錄詳解

users
 ├── migrations  # 存放遷移資料錶的歷史檔案,內容自動生成
 │    └── __init__.py  # 一個空檔案,告訴 Python 該目錄是一個 Python 包。
 ├── __init__.py  # 一個空檔案,告訴 Python 該目錄是一個 Python 包。
 ├── admin.py  # 該應用的後臺管理系統配置,這裡用不到
 ├── apps.py    # 該應用的一些配置,這裡用不到
 ├── models.py    # 資料模組,用來定義資料表結構
 ├── tests.py    # Django提供的自動化測試功能,這裡用不到
 └── views.py    # 檢視模組,程式碼邏輯處理的主要地點,專案中大部分程式碼均在這裡編寫

二、連線MySQL資料庫

首先安裝Django連線MySQL的依賴包

pip install mysqlclient

進入settings.py中,找到下面這段程式碼

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

將其改為自己MySQL的資訊

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 指定MySQL引擎
        'NAME': 'mydata', # 資料庫名稱
        'USER':'root', # 使用者名稱
        'PASSWORD':'123456', # 密碼
        'HOST':'localhost', # 資料庫伺服器IP
        'PORT':'3306', # 埠
    }
}

三、編寫使用者模組的資料模型

# users/model.py
from django.db import models


class Users(models.Model):
    id = models.AutoField(primary_key=True)  # 主鍵id自增
    username = models.CharField(max_length=32, null=False, blank=False, unique=True)  # 使用者名稱
    password = models.CharField(max_length=32, null=False, blank=False)  # 密碼
    email = models.CharField(max_length=32, null=False, blank=False, unique=True)  # 郵箱
    create_time = models.DateTimeField(auto_now_add=True)  # 建立時間

    class Meta:
        # 指定使用者表名稱
        db_table = 'tp_users'

  

遷移資料庫,開啟 Tools > Run manage.py Task…,依次執行

makemigrations
migrate

四、編寫檢視函式

# users/views.py
from django.http import JsonResponse, HttpResponse
from users.models import Users
from django import views


class UserLoginView(views.View):

    def post(self, request):
        json_data = request.body.decode('utf-8')
        python_data = eval(json_data)
        username = python_data.get('username')
        password = python_data.get('password')
        data = Users.objects.filter(username=username, password=password).first()
        if data:
            dict = {"id": data.id, "username": data.username}
            return JsonResponse(dict, status=200)
        return JsonResponse({"data": "無效使用者名稱或密碼"}, status=400)


class UserRegisterView(views.View):

    def post(self, request):
        json_data = request.body.decode('utf-8')
        python_data = eval(json_data)
        if python_data.get("username") and python_data.get("password") and python_data.get("email"):
            try:
                new_user = Users.objects.create(**python_data)
                dict = {"id": new_user.id, "username": new_user.username}
                return JsonResponse(dict, status=201)
            except Exception as e:
                return JsonResponse({"data_error": str(e)}, status=400)
        return JsonResponse({"data": "所有欄位為必填項"}, status=400)

五、編寫使用者模組應用的路由

在users目錄下建立urls.py檔案,便於管理該應用下的路由

# users/urls.py
from django.urls import path
from users import views

urlpatterns = [
    path('login/', views.UserLoginView.as_view()),
    path('register/', views.UserRegisterView.as_view())
]

六、定義全域性路由

前端傳送請求的介面會先訪問全域性路由再訪問應用下的路由

# testplatform/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include("users.urls")),
]

七、測試

1.請求註冊介面

2.請求登入介面

八、總結


轉載請註明出處,商用請徵得作者本人同意,謝謝!!!