首页 > 其他分享 >Django REST framework 安装及简单示例

Django REST framework 安装及简单示例

时间:2024-03-03 13:47:46浏览次数:28  
标签:False 示例 models REST Django blank django null True

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

相关文章

  • AT_arc083_b [ABC074D] Restoring Road Network 题解
    难度虚高,建议评橙/黄qwq。首先我们发现这是一道最短路问题,且\(N\le300\),于是采取floyd算法解决。具体地,我们分情况分类讨论。令我们当前枚举到的最短路径起点为\(i\),终点为\(j\),中转点为\(k\),输入的矩阵为\(dis\)。若\(dis_{i,j}>dis_{i,k}+dis_{k,j}\),则一定无......
  • mitmdump写法示例
    在界面上操作抓住相关的接口,有点类似于loadrunner的录制 安装:pipinstallmitmproxy mitmproxy分为三个组件:mitmproxy mitmweb  可视化的web界面mitmdump 命令行格式,可用于对接python脚本  前置步骤:1.如果是https,需要安装证书2.开启代理:127.0.0.1:8080 ......
  • 策略模式代码示例(二)
    一、定义策略模式,针对每一个不同的类型,调用具有共同接口的不同实现类,从而使得它们可以相互替换。策略模式,针对实现同一接口的不同的类,采用不同的策略。比如,面对高级会员、初级会员会采用不同的折扣。策略模式,可以避免大量的if和else。二、角色策略模式涉及到三个角色:●......
  • 为什么django3+版本不能用sql_server.pyodbc只能用mssql
    之前使用的是django2.2.2,后来换到django3.2后发现在settings中进行数据库链接sqlserver的时候sql_server.pyodbc用不了,随后切换到mssql才行,后来查阅后发现是版本问题导致 Django3.2本身不包含对SQLServer的直接支持。默认情况下,Django支持几种主流的数据库后端,例如SQLi......
  • 解决celery与django结合后,分别启动celery和django的进程同时调用定时任务的问题
     django中引入celery后发现在代码中写如下这样的定时任务,启动celery和django的工程后,他们都会调用这个定时任务导致,任务有的时候会冲突出现奇怪的问题。如何解决请继续看。scheduler=BackgroundScheduler()scheduler.add_job(testFunc,'interval',seconds=60)scheduler.......
  • Django的视图响应机制-一次性响应OR流式响应
    一次性响应:HttpResponse类及其子类、JsonResponse类流式响应:SteamingHttpResponse类、FileResponse类文件下载为例#HttpResponse方式,文件内容一次性响应,仅适合小文件deffile_download(request):withopen('data.txt')asf:c=f.read()returnHttpRespons......
  • Qt 多线程中使用信号槽的示例
    之前对线程理解得不深入,所以对Qt的线程机制没有搞清楚,今天写一篇文章总结一下,如有错误,欢迎指出。    首先需要理解线程是什么,线程在代码中的表现其实就是一个函数,只不过这个函数和主线程的函数同时运行,写C语言的都知道,一般代码是从main()函数开始运行的,每个线程都有一......
  • Django项目中使用JWT身份验证
    一、什么是JWTJWT,全称是JSONWebToken,是一个开放标准(RFC7519),它定义了一种紧凑的、自包含的方式,用于在多方之间安全地传输JSON格式的信息。这些信息可以被验证和信任,因为它们是数字签名的。JWT由三部分组成:头部(Header)、负载(Payload)、签名(Signature),每部分之间以.分隔。JWT最常见......
  • 如何使用 vscode 搭建 Django Restful API 开发环境 All In One
    如何使用vscode搭建DjangoRestfulAPI开发环境AllInOnevscode+Django(Python)demos(......
  • .net 应用程序 生成Docker映像时 dotnet restore找不到自定义源的包的问题,ContainerBu
    一、问题:我们在.net应用中生成Docker映像时,会出现ContainerBuildAndLaunch任务意外失败的问题。 查看输出窗口发现,是执行dotnetrestore时,找不到包的问题,因为我的这些包是在自己的私有源上二、解决方案:在Dockerfile文件中,在执行dotnetrestore前一行添加nuget私有源就行......