暑期经验分享——django开发框架

目录

  • 框架简介
  • 模型
  • 视图
  • 控制器
  • 插件

之前做过的项目大部分都是做成了网络服务器的模式,即使用网络服务器框架给前端提供机器学习服务,包括使用flask搭建的无代码深度学习服务器、使用django搭建的反洗钱稽查系统,这里简单介绍下前面用到的服务器框架——django。

框架简介

本质上来讲,不管是轻量级的flask,还是稍微复杂一些的django,都是一种对于socket通信的封装,它们都是使用socket通信实现服务器和用户之间的交互。
暑期经验分享——django开发框架_第1张图片
django是一种典型的MVC框架,即将应用分为了三部分:model(模型)、view(视图)、controller(控制器),下面从这三部分依次对django进行讲解。

模型

模型负责业务对象和数据库对象。这是一个相对抽象的描述方式,django使用自己的方式定义了一套数据库的操作,包括数据表的创建、修改以及数据的增删改查。不管底层使用的是哪种类型的数据库,用户只需要掌握了django的这么一套模式,就可以以不变应万变。
模型的创建:

class TbTrainContent(models.Model):
    """ 存放训练信息的模型 """
    # 训练数据id
    train_data_id = models.AutoField(primary_key=True)
    # 制度id
    law = models.ForeignKey(TbDocContent, on_delete=models.CASCADE)
    # 制度条例
    law_content = models.CharField(max_length=10000)
    # 查询内容
    question_des = models.CharField(max_length=10000)
    # 标签,正类 负类 0:负类 即制度条例和查询内容无关 1:正类 即制度条例和查询内容有关
    label = models.CharField(max_length=10)
    # 插入时间
    insert_time = models.DateTimeField()
    # 是否已经被使用,这里是在检查更新的时候用到,取0或者1 0:未被使用 1:已经被用过了
    is_used = models.CharField(max_length=10, default=0)

    class Meta:
        unique_together = ['law', 'hash_question_des', 'label']

数据的插入:

tb_train_content = TbTrainContent(law_id=sel_law_id_all[last_index],
                                              law_content=sel_law_all[last_index],
                                              hash_question_des=has_question,
                                              question_des=question_desc,
                                              label='0',
                                              insert_time=time.strftime('%Y-%m-%d %I:%M:%S'),
                                              is_used='0')
# 保存数据
tb_train_content.save()

视图

视图用于生成用户能够看到的内容,在django中使用view函数来实现。view函数根据用户传递进来的参数进行不同的操作,进而返回相应的数据给用户。下面是一个更新表的视图函数:

def update_org_code(request):
    """ 更新机构码上传时间 :param request: :return: """
    # 记录制度的更新时间
    upload_time = time.strftime('%Y-%m-%d %I:%M:%S')
    org_code = request.GET['org_code']
    tb_file_upload_time = TbFileUploadTime(org_code=org_code, update_time=upload_time)
    tb_file_upload_time.save()
    ps = []
    for i in range(3):
        p = Thread(target=QueryLaw.update_cache, args=(org_code, i))
        ps.append(p)
    for p in ps:
        p.start()    
    return HttpResponse('update org_code %s success' % org_code)

控制器

控制器是连接用户和视图之间的纽带,根据用户请求地址为其分配相应的视图函数。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('search/', search),
    path('feedback/', get_user_feedback),
    path('update_org_code/', update_org_code),
    path('upload_file/', upload_file),
    path('upload_law/', upload_law),
]

插件

你可能感兴趣的:(django,python网络框架)