Django 是python的一个后端服务器框架,用来写web API接口简单且方便。
Djangorestframework 是构建web api的一个强大而灵活的工具包。
Django 官网文档:https://docs.djangoproject.com/en/5.0/ref/settings/
Djangorestframework 官网文档:https://docs.djangoproject.com/en/5.0/ref/settings/
Django安装:
pip3 install django
默认安装最新版本
安装djangorestframework及相关组件:
pip3 install djangorestframework
pip3 install markdown
pip3 install django-filter
创建django项目:
语法格式:django-admin startproject [项目名称]
django-admin startproject myweb
在当前工作目录生成一个myweb项目文件
进入myweb项目中,创建相关应用:
语法格式:python manage.py startapp [应用名称]
python3 manage.py startapp users
修改项目配置文件setting.py文件将新建的项目加上,便于启用django是自动加载相关的应用。
同时把restframework也添加到应用中。
在settings.py中还需要添加REST_FRAMEWORK的配置信息。新建一个REST_FRAMEWORK如下:
REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, # or allow read-only access for unauthenticated users. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }
接着配置数据库信息,如果使用的是默认的sqlite3,可以不用配置:
配置mysql数据库:
参数说明:
HOST: 数据库服务器地址
NAME: 数据库名称,对应database
USER: 用户名
PASSWORD: 密码
PORT: 端口号
default-character-set: 默认字符集
问题1:
保存后会报错误:django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
由于django默认没有引入数据库包导致,在settings.py 所在的目录中新建init.py文件,并引入mysql数据库组件。
import pymysql pymysql.install_as_MySQLdb()
创建模型models:
在users应用下models.py中创建user_info 表
from django.db import models # Create your models here. class UserInfoModels(models.Model): user_id = models.CharField(max_length=100,primary_key=True,db_index=True,blank=False,null=False) login_name = models.CharField(max_length=50,db_index=True,blank=False,null=False) username = models.CharField(max_length=50,blank=False,null=False) password = models.CharField(max_length=200,db_index=True,blank=False,null=False) phone = models.CharField(max_length=11,db_index=True,blank=False,null=False) email = models.CharField(max_length=100,blank=True,null=True) gender = models.BooleanField(default=0) address = models.TextField(blank=True,null=True) img = models.FileField(blank=True,null=True) status = models.BooleanField(default=0) is_del = models.BooleanField(default=0) create_time = models.DateTimeField(auto_now_add=True) create_userId = models.CharField(max_length=100,blank=True,null=True) create_userName = models.CharField(max_length=50,db_index=True,blank=False,null=False) update_time = models.DateTimeField(auto_now=True) update_userId = models.CharField(max_length=100,blank=True,null=True) update_userName = models.CharField(max_length=50,db_index=True,blank=False,null=False) remark = models.CharField(max_length=200,blank=True,null=True) account = models.OneToOneField(to_field="account_id",to="UserAccountModels",db_column="account",on_delete=models.SET_NULL,blank=True,null=True) class Meta : # 创建user_info表信息 db_table = "user_info" class UserAccountModels(models.Model): account_id = models.CharField(max_length=100,primary_key=True,db_index=True,blank=False,null=False) user_id = models.CharField(max_length=100,db_index=True,blank=False,null=False) vip_level = models.IntegerField(default=1,blank=False,null=False) vip_name = models.CharField(max_length=20,blank=False,null=False) integral = models.FloatField(blank=False,null=False) price = models.FloatField(blank=True,null=True) status = models.BooleanField(default=0) create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True) remark = models.CharField(max_length=200,blank=True,null=True) class Meta: #创建账号等级表 db_table = "user_account"
生成建表文件:
语法格式:python manage.py makemigrations [应用名称]
python manage.py makemigrations users
执行migrate生成数据库表
python manage.py migrate
数据表创建成功
在users应用下新建序列化文件Serial.py
内容如下:
#encoding:utf-8 from rest_framework import serializers from users.models import UserInfoModels,UserAccountModels class UserInfoSerial(serializers.ModelSerializer): class Meta: model = UserInfoModels fields = ["user_id","login_name","username","phone", "email","address","gender","img","status","account", "create_time","update_time","remark"] depth = 1 class UserAccountSerial(serializers.ModelSerializer): class Meta: model = UserAccountModels fields = "__all__"
在user应用下views.py 中创建查询视图
内容如下:
from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticatedOrReadOnly from users.models import UserInfoModels,UserAccountModels from users.Serial import UserInfoSerial,UserAccountSerial class UserInfoViews(APIView): permission_classes = [IsAuthenticatedOrReadOnly] def get(self,request): queryset = UserInfoModels.objects.all() serializer_data = UserInfoSerial(instance=queryset,many=True) return Response(serializer_data.data) class UserAccountViews(APIView): permission_classes = [IsAuthenticatedOrReadOnly] def get(self,request): queryset = UserAccountModels.objects.all() serializer_data = UserAccountSerial(instance=queryset,many=True) return Response(serializer_data.data)
在users应用下创建urls.py 路由文件
内容如下:
from django.urls import path,include from users.views import UserInfoViews,UserAccountViews urlpatterns = [ path('user_info/', UserInfoViews.as_view()), path("user_account/",UserAccountViews.as_view()), ] 最后配置myweb项目下的路由urls.py,如下: from django.contrib import admin from django.urls import path from django.urls import include urlpatterns = [ # path('admin/', admin.site.urls), path("users/",include("users.urls")), path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
启动django服务
python manage.py runserver
访问user_info接口如下:
访问user_account接口如下:
标签:False,示例,models,REST,Django,blank,django,null,True From: https://www.cnblogs.com/JcHome/p/18049908