django arya插件对数据库操作使用,reverse发娘解析url的使用
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的使用相关推荐
- Django工程-ORM模型数据库操作详解(六)
Django工程-ORM模型数据库操作 下面以用户和图书表模型进行ORM的基本操作使用 ORM模型介绍 1.增加 通过模型类.objects.create()保存. >>> User ...
- 循序渐进Python3(十二) --2-- web框架之django简单实现oracle数据库操作
在 Django 中构建 Oracle 数据库支持的 Web 应用程序 了解如何配置 Django 以便与 Oracle 数据库交互,并使用 ORM 进行数据库连接. 产能在软 ...
- Django进阶Model篇—数据库操作(ORM)
一.数据库配置 django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见https://docs.d ...
- Django之ORM对数据库操作
基本操作 <1> all(): 查询所有结果<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象<3> get(**kwargs): 返回 ...
- DJango周总结二:模型层,单表,多表操作,连表操作,数据库操作,事务
django周复习二 1,模型层: 1单表操作: 13个必会操作总结 返回QuerySet对象的方法有 all() filter() exclude() ...
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、并且——queryset对象序列化...
第三百零九节,Django框架,models.py模块,数据库操作--F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
- [Django ]Django 的数据库操作
Django 的数据库操作 有之前的基础,那么我们就可以开始对数据库进行操作. 一.数据库配置 配置 MySql 在主目录的 settings.py 中修改 Python 1 2 3 4 5 6 7 ...
- 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作
Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...
- Django模型之数据库操作-查询
六.数据库操作-查询 6.1基础条件查询 1 基本查询 get查询单一结果,如果不存在会抛出模型类.DoesNotExist异常. all查询多个结果.[返回的所有结果是列表] count查询结果数量 ...
最新文章
- 用SERVLET进行用户名和密码验证
- fatal error C1083:无法打开包括文件:“stdint.h”: No such file or directory解决方案
- 解决:vue文本识别 “ \n ” 的换行问题(完整案例说明)
- matlab中上下光标的作用,当鼠标移动到按钮上时改变光标形状
- oracle餐饮权,初秋来临,献上餐饮数字化经营的“暖心大餐”
- python3.5以及scrapy,selenium,等 安装
- Linux bash基本介绍
- Java 标注(Annotation)详解
- 内存泄漏(memory leak)的理解与应用
- 使用C++Test进行白盒测试
- 织梦dede仿站模板标签大全(最全)附带仿站工具
- Android面试准备复习之Android知识点大扫描
- 转载-公历转换农历VB示例
- 用python证明给定范围的欧拉常数
- 织梦DedeCMS使用教程:留言簿模块
- python拍七游戏代码_拍七数字游戏 - Johannes-Jensen - 博客园
- 【BasicNet系列:六】MobileNet 论文 v1 v2 笔记解读 + pytorch代码分析
- Python 命令行cmd指定颜色设置
- selenium+云打码+百度ocr爬取360的电话号码标记
- React / Vue 前后端分离项目实现微信分享教程
热门文章
- Oracle中如何记录访问数据库的登录信息?
- CSM5213SG替代BD00GA3WEFJ-E2 测试参数对比
- 计算机文化基础(高职高专版 第十一版)第一章答案
- 加载、编辑和保存Wod格式所见所得的Word文档处理控件TX Text Control ActiveX
- 周易六十四卦——雷火丰卦
- 苹果手机Java在那_iPhone8描述文件在哪?iPhone描述文件不见了如何解决?
- 云展网教程 | 云展网电子杂志页面排版最佳尺寸,最佳字体,字号
- 联邦学习分类及前景应用
- 打开*.acb格式音频文件
- 美国的做法致芯片市值持续暴跌5000亿美元,美国芯片则祈求中国买更多芯片