if value is None:
return None
if isinstance(value, decimal.Decimal):
context = decimal.getcontext().copy()
if max_digits is not None:
# 增加转型类型转换
context.prec = int(max_digits)
if decimal_places is not None:
# 增加转型类型转换
value = value.quantize(decimal.Decimal(1).scaleb(-int(decimal_places)), context=context)
else:
context.traps[decimal.Rounded] = 1
value = context.create_decimal(value)
return "{:f}".format(value)
if decimal_places is not None:
return "%.*f" % (decimal_places, value)
return "{:f}".format(value)
把当前新增的课程模型注册到xadmin里面.
coursers/adminx.py,代码:
import xadmin
from .models import CourseCategory
class CourseCategoryModelAdmin(object):
"""课程分类模型管理类"""
pass
xadmin.site.register(CourseCategory, CourseCategoryModelAdmin)
from .models import Course
class CourseModelAdmin(object):
"""课程模型管理类"""
pass
xadmin.site.register(Course, CourseModelAdmin)
from .models import Teacher
class TeacherModelAdmin(object):
"""老师模型管理类"""
pass
xadmin.site.register(Teacher, TeacherModelAdmin)
from .models import CourseChapter
class CourseChapterModelAdmin(object):
"""课程章节模型管理类"""
pass
xadmin.site.register(CourseChapter, CourseChapterModelAdmin)
from .models import CourseLesson
class CourseLessonModelAdmin(object):
"""课程课时模型管理类"""
pass
xadmin.site.register(CourseLesson, CourseLessonModelAdmin)
添加测试数据
后端实现课程分类列表接口
创建序列化器
courses/serializers.py
from rest_framework import serializers
from .models import CourseCategory
class CourseCategoryModelSerializer(serializers.ModelSerializer):
class Meta:
model = CourseCategory
fields = ("id","name")
创建视图
courses/views.py
# Create your views here.
from rest_framework.generics import ListAPIView
from .models import CourseCategory
from .serializers import CourseCategoryModelSerializer
class CourseCategoryAPIView(ListAPIView):
"""课程分类列表"""
queryset = CourseCategory.objects.filter( is_delete=False, is_show=True ).order_by("-orders")
serializer_class = CourseCategoryModelSerializer
注册路由
from django.urls import path
from . import views
urlpatterns = [
path(r"cate/",views.CourseCategoryAPIView.as_view()),
]
# 总路由
path('courses/', include("courses.urls")),
客户端发送请求获取课程分类信息
课程分类:
全部
{{catetory.name}}
筛 选:
默认
人气
价格
共21个课程
。。。。
完善课程分类筛选的前端特效
课程分类:
全部
{{catetory.name}}
筛 选:
默认
人气
价格
共21个课程
....
后端实现课程信息列表接口
创建序列化器,代码
# 开发中一个序列化器 A 中需要同时序列化其他模型 B 的数据返回给客户端,那么直接通过外键默认只会返回主键ID
# 所以我们可以通过再创建一个模型B的序列化器,对模型B的数据进行序列化
# 在序列化器A中直接把模型B的序列化器调用作为字段值来声明即可.
from .models import Teacher
class TeacherSerializer(serializers.ModelSerializer):
class Meta:
model = Teacher
fields = ("id","name","title")
from .models import Course
class CourseSerializer(serializers.ModelSerializer):
# 这里调用的序列化器,必须事先在前面已经声明好的,否则报错
teacher = TeacherSerializer()
class Meta:
model= Course
fields = ("id","name","course_img","students","lessons","pub_lessons","price","teacher")
视图代码:
from .serializers import CourseModelSerializer
class CourseAPIView(ListAPIView):
queryset = Course.objects.filter(is_delete=False, is_show=True).order_by("orders")
serializer_class = CourseModelSerializer
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支 持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
实用命令实例
默认启动
tcpdump
普通情况下,直
MO= Mobile originate,上行,即用户上发给SP的信息。MT= Mobile Terminate,下行,即SP端下发给用户的信息;
上行:mo提交短信到短信中心下行:mt短信中心向特定的用户转发短信,你的短信是这样的,你所提交的短信,投递的地址是短信中心。短信中心收到你的短信后,存储转发,转发的时候就会根据你填写的接收方号码寻找路由,下发。在彩信领域是一样的道理。下行业务:由SP
import java.util.Arrays;
import java.util.Random;
public class MinKElement {
/**
* 5.最小的K个元素
* I would like to use MaxHeap.
* using QuickSort is also OK
*/
public static void
添加没有默认值:alter table Test add BazaarType char(1)
有默认值的添加列:alter table Test add BazaarType char(1) default(0)
删除没有默认值的列:alter table Test drop COLUMN BazaarType
删除有默认值的列:先删除约束(默认值)alter table Test DRO
Spring Boot 1.2.4已于6.4日发布,repo.spring.io and Maven Central可以下载(推荐使用maven或者gradle构建下载)。
这是一个维护版本,包含了一些修复small number of fixes,建议所有的用户升级。
Spring Boot 1.3的第一个里程碑版本将在几天后发布,包含许多