博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stark组件(1):动态生成URL
阅读量:6572 次
发布时间:2019-06-24

本文共 4450 字,大约阅读时间需要 14 分钟。

项目启动时自动生成URL

效果图:

 

 

 

知识点:

  1. Django启动前通过apps下的ready方法执行一个可以生成URL的py文件
  2. include函数主要返回有三个元素的一个元组。第一个是url配置(urlpatterns),第二个是app(app_name),第三个是命名空间(namespace)。
  3. 通过单例模式,我们反复操作一个对象。

 

项目名:stark_practice

业务app:web

stark app:stark

一、在业务表中生成数据库

web/models.py

from django.db import modelsclass Department(models.Model):    """    部门表    """    title = models.CharField(verbose_name='部门名称', max_length=32)class UserInfo(models.Model):    """    用户表    """    name = models.CharField(verbose_name='姓名', max_length=32)    age = models.CharField(verbose_name='年龄', max_length=32)    email = models.CharField(verbose_name='邮箱', max_length=32)    department = models.ForeignKey(verbose_name='部门', to='Department', on_delete=models.CASCADE)

 

二、加载django项目时自动执行stark文件

stark.apps.py

from django.apps import AppConfigfrom django.utils.module_loading import autodiscover_modulesclass StarkConfig(AppConfig):    name = 'stark'    def ready(self):         autodiscover_modules('stark')  # 执行名为stark的py文件

 

三、stark组件

stark/service/core_function.py

from django.urls import re_pathclass StarkSite(object):    def __init__(self):        self._registry = []        self.app_name = 'stark'        self.namespace = 'stark'    def register(self, model_class, handler_class):        """        :param model_class: 是models中的数据库表对应的类。        :param handler_class: 处理请求的视图函数所在的类        :return:        """        """        self._registry = [           {'model_class': model.Department,'handler':DepartmentHandler(models.Department)},           {'model_class': model.UserInfo,'handler':UserInfo(models.UserInfo)},            {'model_class': model.Host,'handler':Host(models.Host)},        ]        """        # 注意:handler_class接收的第一个参数是数据库表对应的类        self._registry.append({
'model_class': model_class, 'handler': handler_class(model_class)}) def get_urls(self): patterns = [] for item in self._registry: model_class = item['model_class'] handler = item['handler'] app_name = model_class._meta.app_label # 获取当前类所在的app model_name = model_class._meta.model_name # 获取当前类所在的表名称 patterns.append(re_path(r'%s/%s/list' % (app_name, model_name), handler.list_view)) patterns.append(re_path(r'%s/%s/add' % (app_name, model_name), handler.add_view)) patterns.append(re_path(r'%s/%s/edit' % (app_name, model_name), handler.edit_view)) patterns.append(re_path(r'%s/%s/delete' % (app_name, model_name), handler.delete_view)) return patterns @property def urls(self): return self.get_urls(), self.app_name, self.namespacesite = StarkSite()

 

四、使用strak组件

web/stark.py

from django.shortcuts import HttpResponsefrom stark.service.core_func import sitefrom web import modelsclass DepartmentHandler(object):    def __init__(self, model_class):        self.model_class = model_class    def list_view(self, request):        """        列表页面        :param request:        :return:        """        return HttpResponse('列表页面')    def add_view(self, request):        """        添加页面        :param request:        :return:        """        return HttpResponse('添加页面')    def edit_view(self, request):        """        编辑页面        :param request:        :return:        """        return HttpResponse('编辑页面')    def delete_view(self, request):        """        删除页面        :param request:        :return:        """        return HttpResponse('删除页面')class UserInfoHandler:    def __init__(self, model_class):        self.model_class = model_class    def list_view(self, request):        """        列表页面        :param request:        :return:        """        return HttpResponse('列表页面')    def add_view(self, request):        """        添加页面        :param request:        :return:        """        return HttpResponse('添加页面')    def edit_view(self, request):        """        编辑页面        :param request:        :return:        """        return HttpResponse('编辑页面')    def delete_view(self, request):        """        删除页面        :param request:        :return:        """        return HttpResponse('删除页面')site.register(models.Department, DepartmentHandler)site.register(models.UserInfo, UserInfoHandler)

 

五、注册URL

stark_practice/urls.py

from django.contrib import adminfrom django.urls import path, re_pathfrom stark.service.core_func import siteurlpatterns = [    path('admin/', admin.site.urls),    re_path(r'^stark/', site.urls),]

 

转载于:https://www.cnblogs.com/lshedward/p/10560006.html

你可能感兴趣的文章
谁拿了最多奖学金
查看>>
详解linux运维工程师入门级必备技能
查看>>
我的友情链接
查看>>
PhoneGap在Microsoft Visual Studio Express For Wi...
查看>>
Shell脚本的模块化和脚本复用
查看>>
暴力删除
查看>>
unable to bind to locking port 7054 within 45000 ms
查看>>
自动化运维之kickstart自动化部署安装操作系统
查看>>
C++前置声明的一个好处与用法
查看>>
Upgrade GI/CRS 11.1.0.7 to 11.2.0.2. Rootupgrade.sh Hanging
查看>>
vue组件样式scoped
查看>>
整站爬虫命令
查看>>
linux下ssh/sftp配置和权限设置
查看>>
微软职位内部推荐-SDE II
查看>>
SQLPlus获取oracle表操作SQL
查看>>
BFS(两点搜索) UVA 11624 Fire!
查看>>
字符串处理 BestCoder Round #43 1001 pog loves szh I
查看>>
How to add svn:externals in windows using TortoiseSVN
查看>>
JavaScript高级程序设计(5) 引用类型 (上)
查看>>
QT学习-10/31/2012
查看>>