Django REST framework后端项目部分代码

简介: 代码如下

项目settings

"""
Django settings for BannerInterview project.
Generated by 'django-admin startproject' using Django 1.11.10.
For more information on this file, see
https://docs.djangoproject.com/en/1.11/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.11/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'a3d=!trfv(19uu84a_g39jf64x02(e%j@)%=j3pvtf^_=t2pg5'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = ["*"]
# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'apps.user.apps.UserConfig',
    'apps.questionbanks',
    'apps.exam'
]
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'BannerInterview.urls'
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': os.path.join(BASE_DIR, 'templates')
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
WSGI_APPLICATION = 'BannerInterview.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'interview',
        'USER': 'Interview',
        'PASSWORD': 'NzE2NybAFCGdmAmX',
        'HOST': '47.94.80.181',
        'PORT': '3306',
        'CHARSET': 'utf-8',
    }
}
# Password validation
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'                      #发送邮件的邮箱 的 SMTP服务器,这里用了163邮箱
EMAIL_PORT = 25                                  #发件箱的SMTP服务器端口
EMAIL_HOST_USER = 'carinoliu@163.com'            #发送邮件的邮箱地址
EMAIL_HOST_PASSWORD = 'CETHOIPENJUBQCPI'         #发送邮件的邮箱密码(这里使用的是授权码)
EMAIL_FROM = 'BannerStudio<carinoliu@163.com>'
ESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎,用于简单的缓存会话存储
SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
SESSION_COOKIE_NAME = "sessionid"                        # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
SESSION_COOKIE_PATH = "/"                                # Session的cookie保存的路径
SESSION_COOKIE_DOMAIN = None                              # Session的cookie保存的域名
SESSION_COOKIE_SECURE = False                             # 是否Https传输cookie
SESSION_COOKIE_HTTPONLY = True                            # 是否Session的cookie只支持http传输
SESSION_COOKIE_AGE = 1209600                              # Session的cookie失效日期(2周)
SESSION_EXPIRE_AT_BROWSER_CLOSE = True                   # 是否关闭浏览器使得Session过期
SESSION_SAVE_EVERY_REQUEST = False                        # 是否每次请求都保存Session,默认修改之后才保存

项目urls

from django.conf.urls import url, include
urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'users/', include('apps.user.urls')),
    url(r'questionbanks/', include('apps.questionbanks.urls')),
    url(r'exam/', include('apps.exam.urls'))
]

题库模块:

models

from django.db import models
class QuestionBanks(models.Model):
    """题库模型类"""
    question_id = models.AutoField(primary_key=True, blank=True)
    question_type = models.CharField(verbose_name='试题类型', max_length=16, blank=True)
    question_title = models.CharField(verbose_name='试题标题', max_length=128, unique=True, blank=True)
    question_content = models.TextField(verbose_name='试题内容', blank=True)
    question_score = models.IntegerField(verbose_name='试题分值', blank=True)
    question_answer = models.TextField(verbose_name='试题答案', blank=True)
    question_insert_time = models.DateTimeField(verbose_name='试题添加时间', blank=True)
    question_update_time = models.DateTimeField(verbose_name='试题修改时间', blank=True)

serlalizer

# 序列化器
from rest_framework import serializers
from .models import QuestionBanks
class QuestionSerializer(serializers.ModelSerializer):
    """试题详细信息序列化器"""
    class Meta:
        model = QuestionBanks
        fields = (
            'question_id', 'question_type', 'question_title', 'question_content', 'question_score', 'question_answer',
            'question_insert_time', 'question_update_time')

urls

from django.conf.urls import url
from django.contrib import admin
from apps.questionbanks import views
from rest_framework.views import APIView
urlpatterns = [
    url(r'insert/', views.QuestionSingleAPIView().post),
    url(r'selectall/', views.QuestionAPIView().get),
    url(r'update/(?P<pk>\d+)/', views.QuestionSingleAPIView().put),
    url(r'selectbyid/(?P<pk>\d+)/', views.QuestionSingleAPIView().get_byid),
    url(r'delete/(?P<pk>\d+)/', views.QuestionSingleAPIView().delete),
    url(r'deleteall/', views.QuestionAPIView().delete),
    url(r'selectbytype/(?P<pk>\w+)/', views.QuestionAPIView().get_bytype),
    url(r'selectbyscore/(?P<pk>\d+)/', views.QuestionAPIView().get_byscore),
    url(r'getquestion/', views.QuestionAPIView().get_question)
]

views

import random
from django.views import View
from apps.questionbanks.Serializer import QuestionSerializer
from rest_framework.views import APIView
from rest_framework.viewsets import ViewSet
from .models import QuestionBanks
from django.http import JsonResponse, HttpResponse, QueryDict
class QuestionAPIView(APIView):
    # 查询全部试题
    def get(self, request):
        try:
            questions = QuestionBanks.objects.all()
            if questions.exists() == False :
                return JsonResponse({'msg': '无数据'}, safe=False, status=400)
            ser = QuestionSerializer(questions, many=True)
            print(ser)
            return JsonResponse(ser.data, safe=False, status=200)
        except:
            return JsonResponse({'msg': '查询失败,未找到试题'}, status=401)
        # 查询指定试题类型的试题
    def get_bytype(self, request, pk):
        print(pk)
        try:
            questions = QuestionBanks.objects.filter(question_type__exact=pk)
            if (questions.exists()):
                ser = QuestionSerializer(questions, many=True)
                return JsonResponse(ser.data, safe=False, status=200)
            else:
                return JsonResponse({'msg': '查询失败,您的输入有误'}, status=400)
        except:
            return JsonResponse({'msg': '查询失败,未找到该试题'}, status=401)
    def get_byscore(self, request, pk):
        print(pk)
        try:
            questions = QuestionBanks.objects.filter(question_score__exact=pk)
            if (questions.exists()):
                ser = QuestionSerializer(questions, many=True)
                return JsonResponse(ser.data, safe=False, status=200)
            else:
                return JsonResponse({'msg': '查询失败,您的输入有误'}, status=400)
        except:
            return JsonResponse({'msg': '查询失败,未找到该试题'}, status=401)
    # 删除全部试题
    def delete(self, request):
        try:
            QuestionBanks.objects.all().delete()
            return JsonResponse({'msg': '删除成功'}, status=200)
        except:
            return JsonResponse({'msg': '删除失败,未找到试题'}, status=400)
    # 出题
    def get_question(self, request):
        try:
            questions = []
            sum = 0
            size = QuestionBanks.objects.all().count()
            print(size)
            while sum != 100:
                sum = 0
                questions = []
                index = random.sample(range(1, size + 1), 6)
                print(index)
                for i in index:
                    question = QuestionBanks.objects.get(question_id=i)
                    score = question.question_score
                    sum = sum + score
                    questions.append(question)
            ser = QuestionSerializer(questions, many=True)
            return JsonResponse(ser.data, safe=False, status=200)
        except:
            return JsonResponse({'msg': '题库错误---'}, status=401)
class QuestionSingleAPIView(APIView):
    # 添加试题
    def post(self, request):
        try:
            data = request.GET
            questions = QuestionSerializer(data=data)
            print(questions)
            if questions.is_valid():
                questions.save()
                return JsonResponse({'msg': '添加成功'}, status=200)
            else:
                return JsonResponse({'msg': '添加失败,您的输入不合理'}, status=401)
        except:
            return JsonResponse({'msg': '添加失败,您的输入不合理'}, status=400)
    # 修改指定试题内容
    def put(self, request, pk):
        data = request.GET
        try:
            question = QuestionBanks.objects.get(question_id=pk)
            questions = QuestionSerializer(instance=question, data=data)
            print(questions)
            if questions.is_valid():
                questions.save()
                return JsonResponse({'msg': '修改成功'}, status=200)
            else:
                return JsonResponse({'msg': '修改失败,您的输入不合理'}, status=401)
        except:
            return JsonResponse({'msg': '修改失败,未查询到该试题'}, status=400)
    # 查询指定id试题
    def get_byid(self, request, pk):
        print(pk)
        try:
            questions = QuestionBanks.objects.get(question_id=pk)
            ser = QuestionSerializer(questions)
            print(ser)
            return JsonResponse(ser.data, safe=False, status=200)
        except:
            return JsonResponse({'msg': '查询失败,未找到该试题'}, status=401)
    # 删除指定试题
    def delete(self, request, pk):
        print(pk)
        try:
            QuestionBanks.objects.get(question_id=pk).delete()
            return JsonResponse({'msg': '删除成功'}, status=200)
        except:
            return JsonResponse({'msg': '删除失败,未找到该试题'}, status=400)

考试模块:

models

from django.db import models
# Create your models here.
class Exam(models.Model):
    """考试模型类"""
    user_id = models.IntegerField(primary_key=True, blank=True, verbose_name='用户id')
    written_score = models.IntegerField(verbose_name='笔试成绩', blank=True, null=True)
    resume_score = models.IntegerField(verbose_name='简历成绩', blank=True, null=True)
    interview_score = models.IntegerField(verbose_name='面试成绩', blank=True, null=True)
    summary_score = models.IntegerField(verbose_name='综合成绩', blank=True, null=True)

Serializer

# 序列化器
from rest_framework import serializers
from apps.exam.models import Exam
class ExamSerializer(serializers.ModelSerializer):
    """试题详细信息序列化器"""
    class Meta:
        model = Exam
        fields = ('user_id', 'written_score', 'resume_score', 'interview_score', 'summary_score')

urls

from django.conf.urls import url
from django.contrib import admin
from apps.exam import views
urlpatterns = [
    url(r'insert/', views.ExamSingleAPIView().post),
    url(r'selectbyid/(?P<pk>\d+)/', views.ExamSingleAPIView().get_byid),
    url(r'delete/(?P<pk>\d+)/', views.ExamSingleAPIView().delete),
    url(r'update/(?P<pk>\d+)/', views.ExamSingleAPIView().update),
    url(r'selectall/', views.ExamAPIView().get),
    url(r'deleteall/',views.ExamAPIView().delete),
    url(r'selectqualified/', views.ExamAPIView().select)

views

from django.db.models import QuerySet
from django.http import JsonResponse
from django.shortcuts import render
# Create your views here.
from rest_framework.views import APIView
from apps.exam.Serializer import ExamSerializer
from apps.exam.models import Exam
class ExamSingleAPIView(APIView):
    # 添加成绩信息
    def post(self, request):
        try:
            data = request.GET
            exam = ExamSerializer(data=data)
            print(exam)
            if exam.is_valid():
                exam.save()
                return JsonResponse({'msg': '添加成功'}, status=200)
            else:
                return JsonResponse({'msg': '添加失败,您的输入不合理'}, status=401)
        except:
            return JsonResponse({'msg': '添加失败,您的输入不合理'}, status=400)
    # 查询成绩信息
    def get_byid(self, request, pk):
        print(pk)
        try:
            exams = Exam.objects.get(user_id=pk)
            exam = ExamSerializer(exams)
            print(exam)
            return JsonResponse(exam.data, safe=False, status=200)
        except:
            return JsonResponse({'msg': '查询失败,未找到信息'}, status=401)
    # 删除成绩信息
    def delete(self, request, pk):
        print(pk)
        try:
            Exam.objects.get(user_id=pk).delete()
            return JsonResponse({'msg': '删除成功'}, status=200)
        except:
            return JsonResponse({'msg': '删除失败,未找到该试题'}, status=400)
    # 修改成绩信息
    def update(self, request, pk):
        print(pk)
        data = request.GET
        try:
            exams = Exam.objects.get(user_id=pk)
            exam = ExamSerializer(instance=exams, data=data)
            if exam.is_valid():
                exam.save()
                return JsonResponse({'msg': '修改成功'}, status=200)
            else:
                return JsonResponse({'msg': '修改失败,您输入的信息有误'}, status=400)
        except:
            return JsonResponse({'msg': '修改失败,未查询到信息'}, status=401)
class ExamAPIView(APIView):
    # 查询全部试题
    def get(self, request):
        try:
            exam = Exam.objects.all()
            if exam.exists() == False :
                return JsonResponse({'msg': '无数据'}, safe=False, status=400)
            exams = ExamSerializer(exam, many=True)
            print(exams)
            return JsonResponse(exams.data, safe=False, status=200)
        except:
            return JsonResponse({'msg': '查询失败'}, safe=False, status=200)
    # 删除全部试题
    def delete(self, request):
        try:
            Exam.objects.all().delete()
            return JsonResponse({'msg': '删除成功'}, status=200)
        except:
            return JsonResponse({'msg': '删除失败'}, status=401)
    def select(self, request):
        try:
            exams = Exam.objects.filter(summary_score__gte=60)
            if exams.exists():
                exam = ExamSerializer(exams, many=True)
                return JsonResponse(exam.data, safe=False, status=200)
            else:
                return JsonResponse({'msg': '查询失败'}, safe=False, status=400)
        except:
            return JsonResponse({'msg': '查询失败'}, safe=False, status=401)
目录
相关文章
|
19天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
53 3
|
24天前
|
数据库 开发者
后端开发的哲学:代码与人生的交织
在数字化的时代,后端开发不仅仅是技术的堆砌,它更像是一场深刻的人生修炼。本文将探讨后端开发中蕴含的哲理,以及这些哲理如何影响我们的职业生涯和人生观。我们将从代码的本质出发,逐步深入到人生的意义,最终理解为何“你必须成为你希望在世界上看到的改变。”
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
73 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
2月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
123 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
1月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
36 5
|
1月前
|
JavaScript 前端开发 API
vue获取图片的blob传给django后端
vue获取图片的blob传给django后端
35 4
|
1月前
|
算法 Java Linux
java制作海报五:java 后端整合 echarts 画出 折线图,项目放在linux上,echarts图上不显示中文,显示方框口口口
这篇文章介绍了如何在Java后端整合ECharts库来绘制折线图,并讨论了在Linux环境下ECharts图表中文显示问题。
39 1
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
107 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
93 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
53 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例

热门文章

最新文章

下一篇
无影云桌面