arya 项目01 (主要学习reverse方法,逆向解析url)
一、项目结构(只列出使用的文件)- learnmodelform    项目目录- app01    第一个appmodel.py    数据库文件arya.py    引用插件- arya    第二个appapps.py    加载自动搜索模块,django启动时自动搜索该我文件配置的模块- service    arya逻辑文件目录v1.py    逻辑代码文件,主要用来配置url,table表单展示数据,数据库操作等- learnmodelform settings.py  配置文件urls.py    路由文件- templates    模板文件model.py代码:from django.db import models# Create your models here.class Role(models.Model):caption = models.CharField(max_length=32)def __str__(self):return self.captionclass UserType(models.Model):title = models.CharField(max_length=32)def __str__(self):return self.titleclass UserInfo(models.Model):name = models.CharField(max_length=32)pwd = models.CharField(max_length=32)email = models.CharField(max_length=32)ut = models.ForeignKey(to="UserType", blank=True,null=True)roles = models.ManyToManyField(to="Role",blank=True)def __str__(self):return self.namearya.py代码:from arya.service import v1from . import models"""{models.UserInfo: AryaConfig(models.UserInfo,site),models.UserType: AryaConfig(models.UserType,site),}"""class UserInfoConfig(v1.AryaConfig):list_display = ['name', 'pwd', 'id', 'email']v1.site.register(models.UserInfo,UserInfoConfig)class UserTypeConfig(v1.AryaConfig):list_display = ['id', 'title']v1.site.register(models.UserType, UserTypeConfig)class RoleConfig(v1.AryaConfig):list_display = ['id', 'caption']v1.site.register(models.Role,RoleConfig)  apps.py代码(在arya应用中)from django.apps import AppConfigclass AryaConfig(AppConfig):name = 'arya'def ready(self):from django.utils.module_loading import autodiscover_modulesautodiscover_modules('arya')v1.py代码:from django.shortcuts import HttpResponse,render,redirectfrom django.utils.safestring import mark_safefrom django.urls import reverseclass AryaConfig(object):list_display = []def get_list_display(self):result = []result.extend(self.list_display)# 如果有编辑权限   #reslut=['name', 'pwd', 'id', 'email']result.append(AryaConfig.row_edit)# 如果有删除权限result.append(AryaConfig.row_del)result.insert(0, AryaConfig.row_checkbox)return resultdef row_del(self,row):# return row.name + row.email+str(row.id)# 生成删除URL# app01_userinfo_deleteapp = self.model_class._meta.app_label  #app名md = self.model_class._meta.model_namename = "arya:%s_%s_delete" %(app,md,)  # arya:app01_userinfo_deleteurl = reverse(viewname=name, args=(row.id,))    #逆向解析urlprint(url)return mark_safe("<a href='{0}'>删除</a>".format(url))def row_edit(self,row):# return row.name + row.email+str(row.id)# 生成编辑URL#  app01_userinfo_changeapp = self.model_class._meta.app_labelmd = self.model_class._meta.model_namename = "arya:%s_%s_change" %(app, md,) # arya:app01_userinfo_change  必须按照这种格式,change是视图函数url = reverse(viewname=name,args=(row.id,))return mark_safe("<a href='{0}'>编辑</a>".format(url))def row_checkbox(self,row):return mark_safe("<input type='checkbox' value='{0}' />".format(row.id))def __init__(self, model_class,site):self.model_class = model_classself.site = site@propertydef urls(self):from django.conf.urls import url, include# self.model_class # UserInfo,UserGroupapp = self.model_class._meta.app_labelmd = self.model_class._meta.model_namepartterns = [url(r'^$', self.changelist_view, name="%s_%s_list" %(app, md,)),url(r'^add/',self.add_view,name="%s_%s_add" %(app,md,)),url(r'^(\d+)/change/',self.change_view,name="%s_%s_change" %(app,md,)),url(r'^(\d+)/delete/',self.delete_view,name="%s_%s_delete" %(app,md,)),]return partternsdef changelist_view(self,request):"""访问列表页面self =  AryaConfig对象1(UserInfo),model_class=UserInfo/userinfo//userinfo/add//userinfo/1/delete//userinfo/1/change/self.model_class = UserInfo/usertype//usertype/add//usertype/1/delete//usertype/1/change/self.model_class = UserType:param request::return:"""table_data = []queryset = self.model_class.objects.all()# [obj,obj,obj,obj]# list_display = ['name','pwd','email']for obj in queryset:row = []for str_func in self.get_list_display():if isinstance(str_func,str):col = getattr(obj,str_func)else:col = str_func(self,obj)row.append(col)table_data.append(row)return render(request,'changelist.html',{'table_data': table_data})def add_view(self,request):return HttpResponse('添加页面')def change_view(self,request,nid):# obj = self.model_class.objects.filter(id=nid).first()return HttpResponse('修改页面')def delete_view(self,request,nid):# self.model_class.objects.filter(id=nid).delete()return HttpResponse('删除页面')class AryaSite(object):def __init__(self):self._registry = {}def register(self, class_name, config_class):"""self._registry = {models.UserInfo: obj1 = AryaConfig(models.UserInfo,site),models.UserType: obj2 = AryaConfig(models.UserType,site),}:param class_name::param config_class::return:"""self._registry[class_name] = config_class(class_name,self)@propertydef urls(self):from django.conf.urls import url, includepartterns = [url(r'^login/', self.login),url(r'^logout/', self.logout),]for model_class,arya_config_obj in self._registry.items():app_model_name = r'^{0}/{1}/'.format(model_class._meta.app_label,model_class._meta.model_name)  #/app名/模块名/pt = url(app_model_name, (arya_config_obj.urls,None,None))partterns.append(pt)return partternsdef login(self,request):from django.shortcuts import HttpResponsereturn HttpResponse('Login')def logout(self,request):from django.shortcuts import HttpResponsereturn HttpResponse('Logout')site = AryaSite()urls.py代码:
from django.conf.urls import url,include
from django.contrib import admin
from arya.service import v1urlpatterns = [url(r'^admin/', admin.site.urls),url(r'arya/', (v1.site.urls,None,'arya')),
]settings.py修改install_app
'arya.apps.AryaConfig',
'app01', changelist.html 模板代码:<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><table border="1">{% for row in table_data %}<tr>{% for col in row %}<td>{{ col }}</td>{% endfor %}</tr>{% endfor %}</table>
</body>
</html>二、ModelForm插件用法(其他代码参考一)
views.py代码:
from django.shortcuts import render,redirect# Create your views here.
from django.forms import ModelForm
from . import modelsclass TestModelForm(ModelForm):class Meta:# model = models.UserInfomodel = models.UserTypefields = "__all__"def test(request):if request.method == "GET":obj = TestModelForm()return render(request,'test.html', {'obj':obj})else:obj = TestModelForm(data=request.POST)if obj.is_valid():obj.save()return redirect('/arya/app01/usertype/')return render(request,'test.html', {'obj':obj})def edit(request,nid):# user_obj = models.UserInfo.objects.filter(id=nid).first()user_obj = models.UserType.objects.filter(id=nid).first()if request.method == 'GET':obj = TestModelForm(instance=user_obj)return render(request,'edit.html',{'obj':obj})else:obj = TestModelForm(instance=user_obj,data=request.POST)if obj.is_valid():obj.save()return redirect('/arya/app01/usertype/')return render(request, 'edit.html', {'obj':obj})urls.pyfrom django.conf.urls import url,include
from django.contrib import admin
from arya.service import v1
from app01 import viewsurlpatterns = [url(r'^admin/', admin.site.urls),url(r'arya/', (v1.site.urls,None,'arya')),url(r'^test/',views.test),url(r'^edit/(\d+)/',views.edit),
]test.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>添加页面</h1>
<form method="POST" novalidate>{% csrf_token %}{{ obj.as_p }}<input type="submit" value="提交">
</form>
</body>
</html>edit.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>编辑页面</h1>
<form method="POST" novalidate>{% csrf_token %}{{ obj.as_p }}<input type="submit" value="提交">
</form>
</body>
</html>

转载于:https://blog.51cto.com/haoyonghui/2044721

django arya插件对数据库操作使用,reverse发娘解析url的使用相关推荐

  1. Django工程-ORM模型数据库操作详解(六)

    Django工程-ORM模型数据库操作 下面以用户和图书表模型进行ORM的基本操作使用 ORM模型介绍 1.增加 通过模型类.objects.create()保存. >>> User ...

  2. 循序渐进Python3(十二) --2--  web框架之django简单实现oracle数据库操作

    在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接.             产能在软 ...

  3. Django进阶Model篇—数据库操作(ORM)

    一.数据库配置 django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见https://docs.d ...

  4. Django之ORM对数据库操作

    基本操作 <1> all(): 查询所有结果<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象<3> get(**kwargs): 返回 ...

  5. DJango周总结二:模型层,单表,多表操作,连表操作,数据库操作,事务

    django周复习二  1,模型层:   1单表操作:    13个必会操作总结     返回QuerySet对象的方法有     all()     filter()     exclude()   ...

  6. 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...

    第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...

  7. [Django ]Django 的数据库操作

    Django 的数据库操作 有之前的基础,那么我们就可以开始对数据库进行操作. 一.数据库配置 配置 MySql 在主目录的 settings.py 中修改 Python 1 2 3 4 5 6 7 ...

  8. 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作

    Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...

  9. Django模型之数据库操作-查询

    六.数据库操作-查询 6.1基础条件查询 1 基本查询 get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常. all查询多个结果.[返回的所有结果是列表] count查询结果数量 ...

最新文章

  1. 用SERVLET进行用户名和密码验证
  2. fatal error C1083:无法打开包括文件:“stdint.h”: No such file or directory解决方案
  3. 解决:vue文本识别 “ \n ” 的换行问题(完整案例说明)
  4. matlab中上下光标的作用,当鼠标移动到按钮上时改变光标形状
  5. oracle餐饮权,初秋来临,献上餐饮数字化经营的“暖心大餐”
  6. python3.5以及scrapy,selenium,等 安装
  7. Linux bash基本介绍
  8. Java 标注(Annotation)详解
  9. 内存泄漏(memory leak)的理解与应用
  10. 使用C++Test进行白盒测试
  11. 织梦dede仿站模板标签大全(最全)附带仿站工具
  12. Android面试准备复习之Android知识点大扫描
  13. 转载-公历转换农历VB示例
  14. 用python证明给定范围的欧拉常数
  15. 织梦DedeCMS使用教程:留言簿模块
  16. python拍七游戏代码_拍七数字游戏 - Johannes-Jensen - 博客园
  17. 【BasicNet系列:六】MobileNet 论文 v1 v2 笔记解读 + pytorch代码分析
  18. Python 命令行cmd指定颜色设置
  19. selenium+云打码+百度ocr爬取360的电话号码标记
  20. React / Vue 前后端分离项目实现微信分享教程

热门文章

  1. Oracle中如何记录访问数据库的登录信息?
  2. CSM5213SG替代BD00GA3WEFJ-E2 测试参数对比
  3. 计算机文化基础(高职高专版 第十一版)第一章答案
  4. 加载、编辑和保存Wod格式所见所得的Word文档处理控件TX Text Control ActiveX
  5. 周易六十四卦——雷火丰卦
  6. 苹果手机Java在那_iPhone8描述文件在哪?iPhone描述文件不见了如何解决?
  7. 云展网教程 | 云展网电子杂志页面排版最佳尺寸,最佳字体,字号
  8. 联邦学习分类及前景应用
  9. 打开*.acb格式音频文件
  10. 美国的做法致芯片市值持续暴跌5000亿美元,美国芯片则祈求中国买更多芯片