Python Web开发 之 学生管理系统(1)

 

 

 Restful规范 --- 通信协议

API和用户通信协议,推荐使用HTTPS

Restful规范 --- 域名

有两种可选的方式:

① https://api.abc.com/

② https://abc.com/api/

Restful规范 --- 请求方法

GET : 从服务器取出资源(一项或多项)

POST : 在服务器新建一个资源 PUT : 在服务器更新资源(客户端提供改变后的完整资源) PATCH : 在服务器更新资源(客户端提供改变的属性)

DELETE : 从服务器删除资源

Restful规范 --- 状态码

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

204 NO CONTENT - [DELETE]:用户删除数据成功。

400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

Restful规范 --- 错误处理

状态码为4xx时需要返回错误信息提示,默认error为返回的字典中的key,当然也可以自己定义。例如:
{
      error: 'Invalid API key’
 }

 

 

 

 

 创建model

from django.db import models

# Create your models here.

# 学院-faculty 专业 major 学生信息  student

# 学院 Faculty
class Faculty(models.Model):
    name = models.CharField(verbose_name="学院名称",max_length=100,unique=True,null=False,blank=False)

    class Meta:
        managed = True
        app_label = "studentweb"
        db_table = "Stu_Faculty"

    def __str__(self):
        return "%s" %(self.name)


# 专业 Major id name faculty
class Major(models.Model):
    name = models.CharField(verbose_name="专业名称",max_length=100,null=False,blank=False)
    faculty = models.ForeignKey(verbose_name="所属学院",to=Faculty,on_delete=models.PROTECT)

    class Meta:
        managed = True
        app_label = "studentweb"
        db_table = "Stu_Major"

    def __str__(self):
        return "%s" %(self.name)


# 学生信息  Student son name genger birthday major mobile email address image
class Student(models.Model):
    sno = models.CharField(verbose_name="学号",max_length=100,primary_key=True,null=False,blank=False)
    name = models.CharField(verbose_name="姓名", max_length=100, null=False, blank=False)
    gender = models.CharField(verbose_name="性别", max_length=100, null=False, blank=True,default=None)
    birthday = models.DateTimeField(verbose_name="出生日期", null=False, blank=True, default=None)
    major = models.ForeignKey(verbose_name="专业", to=Major,on_delete=models.PROTECT)
    mobile = models.CharField(verbose_name="电话", max_length=100, null=False, blank=True, default=None)
    email = models.CharField(verbose_name="邮箱", max_length=100, null=False, blank=True, default=None)
    address = models.CharField(verbose_name="地址", max_length=100, null=False, blank=True, default=None)
    image = models.CharField(verbose_name="照片", max_length=100, null=False, blank=True, default=None)

    class Meta:
        managed = True
        app_label = "studentweb"
        db_table = "Stu_Studet"

    def __str__(self):
        return "%s" %(self.name)



# -*- coding: utf-8 -*-
from rest_framework import serializers
from studentweb.models import Faculty,Major,Student

class FacultySerialzer(serializers.ModelSerializer):
    class Meta:
        model = Faculty
        fields = "__all__"


class MajorSerialzer(serializers.ModelSerializer):
    faculty = FacultySerialzer()
    class Meta:
        model = Major
        fields = "__all__"


class StudentSerialzer(serializers.ModelSerializer):
    major = MajorSerialzer
    class Meta:
        model = Student
        fields = "__all__"
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from studentweb.models import Faculty,Major,Student
from studentweb.serializer import FacultySerialzer,MajorSerialzer,StudentSerialzer
from studentweb.filter import FacultyFilter
from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import action
# Create your views here.


# Faculty视图
class FacultyViewSet(ModelViewSet):
    """
           create:
           创建院系信息
           retrieve:
           获取院系信息详情数据
           update:
           完整更新院系信息
           partial_update:
           部分更新院系信息
           destroy:
           删除院系信息
           list:
           获取所有院系信息

           """
    queryset = Faculty.objects.all()
    serializer_class = FacultySerialzer
    # 指定筛选的类
    #filter_class = FacultyFilter



# --- Major视图---
class MajorViewSet(ModelViewSet):
    """
    create:
    创建专业信息
    retrieve:
    获取专业信息详情数据
    update:
    完整更新专业信息
    partial_update:
    部分更新专业信息
    destroy:
    删除专业信息
    list:
    获取所有专业信息

    """
    queryset = Major.objects.all()
    serializer_class = MajorSerialzer

    # 指定筛选的类
   # filter_class = MajorFilter


# --- Student视图---
class StudentViewSet(ModelViewSet):
    """
    create:
    创建学生信息
    retrieve:
    获取学生信息详情数据
    update:
    完整更新学生信息
    partial_update:
    部分更新学生信息
    destroy:
    删除学生信息
    list:
    获取所有学生信息

    """

    queryset = Student.objects.all()
    serializer_class = StudentSerialzer
# -*- coding: utf-8 -*-
from django.urls import path
from rest_framework.routers import DefaultRouter
from studentweb.views import FacultyViewSet,MajorViewSet,StudentViewSet

# 1.实例一个 DefaultRouter
router = DefaultRouter()

# 2.注册相应的url
# 注册faculty对象
router.register('facultys', FacultyViewSet, basename='facultys')  # http://127.0.0.1:8000/api/v1/facultys/
# 注册major对象
router.register('majors', MajorViewSet, basename='majors')  # http://127.0.0.1:8000/api/v1/majors/
# 注册student对象
router.register('students', StudentViewSet, basename='students')  # http://127.0.0.1:8000/api/v1/students/

urlpatterns = []

urlpatterns += router.urls

 

 

 

 

 

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值