Django之路由系统的分发本质和admin的使用
一、Django之路由系统的分发本质:
Django大致工作流程
1、客户端发送请求(get/post)经过web服务器、Django中间件、 到达路由分配系统
2、路由分配系统根据提取 request中携带的的url路径(path)与视图函数映射关系列表中,匹配到1个视图函数,foo(request)执行;
3、视图函数 使用原生SQL或者ORM去数据库拿到数据,在服务端进行渲染(模板+数据渲染)
4、视图函数return一个 response对象 返回客户端
本文主要介绍 Django路由分配系统本质和admin的使用
实际上Django的路由分配系统是分级匹配的一个制度。
当urls.py中有 include 包含下一个应用的相关路径的时候,我们可以查看include 的函数返回的值,可以知道: return (urlconf_module, app_name, namespace)返回一个元祖。
第一个参数 urlconf_module 是一个列表,namespace和,app_name 是一个字符串变量。
urlpatterns也可以这样写:
urlpatterns = [ url(r'^admin/', admin.site.urls), #创建Django项目本身的admin 相关陆路由 url(r'^index/xxx/xxx/xx/xx/xx/', views.index,name='inx'), #url = reverse('inx') url(r'^login/', views.login), url(r'^monitor/', include('monitor.urls')), url(r'^openstack/', include('openstack.urls',namespace='o')), #url = reverse('o:hosts') /monitor/hosts/ url(r'^login/', views.login), url(r'^monitor/', ([ url(r'^hosts/',mviews.hosts,name='hhhhh'), #url = reverse('oo:hhhhh') url(r'^c1/',mviews.hosts), url(r'^x1/', ([ url(r'^xxx1/',mviews.hosts), url(r'^xxx2/',mviews.hosts,name='xx2'), #url = reverse('mm:uu:xx2') url(r'^xxx3/',mviews.hosts), url(r'^xxx4/',mviews.hosts), ],None,None)), url(r'^c2/',mviews.hosts), url(r'^c3/',mviews.hosts), ],None,'mm')), url(r'^openstack/', ([ url(r'^hosts/',oviews.hosts,name='hhhhh'), url = reverse('oo:hhhh') url(r'^c1/',oviews.hosts), url(r'^c2/',oviews.hosts), url(r'^c3/',oviews.hosts), ],None,'oo')), ]
同事也可以是使用for 生成URL:
for i in range(10): temp = [] for j in range(5): temp.append(url(r'^inner_%s/' % j, views.login)) v = url(r'^login_%s/' %i, (temp,None,None)) urlpatterns.append(v)
这样循环生成的url 是最外层是 login_%s又十个第二层是5个 inner_%s . 共生成 50个路径可供匹配。

二、admin的使用
Django Admin使用方法
Django为开发者提供一个快速实现表增删改查的工具。
当创建Django项目的时候,项目自动会有:http://127.0.0.1:8002/admin/

当创建models文件时:
from django.db import models class Department(models.Model): """ 部门表 """ title = models.CharField(max_length=32) code = models.CharField(max_length=32,default='1002') def __str__(self): return self.title class UserInfo(models.Model): """ 用户表 """ name = models.CharField(max_length=32) email = models.EmailField(max_length=32) dp = models.ForeignKey(to='Department') class Role(models.Model): """ 角色表 """ title = models.CharField(max_length=32) users = models.ManyToManyField(to='UserInfo')
当 需要生成 /admin/app01/department/ 路径的时候需要在admin.py 注册:
from app01 import models admin.site.register(models.Department)
当注册后,就自动生成4个url:
# 生成URL # /admin/app01/department/ 查看列表页面 # /admin/app01/department/add/ 添加页面 # /admin/app01/department/1/change/ 修改页面 # /admin/app01/department/1/delete/ 删除页面
定制路由:
1. list_display,列表时,定制显示的列。
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): list_display = ('user', 'pwd', 'xxxxx') def xxxxx(self, obj): return "xxxxx"
2. list_display_links,列表时,定制列可以点击跳转。
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): list_display = ('user', 'pwd', 'xxxxx') list_display_links = ('pwd',)
3. list_filter,列表时,定制右侧快速筛选。
from django.utils.translation import ugettext_lazy as _ @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): list_display = ('user', 'pwd') class Ugg(admin.SimpleListFilter): title = _('decade born') parameter_name = 'xxxxxx' def lookups(self, request, model_admin): """ 显示筛选选项 :param request: :param model_admin: :return: """ return models.UserGroup.objects.values_list('id', 'title') def queryset(self, request, queryset): """ 点击查询时,进行筛选 :param request: :param queryset: :return: """ v = self.value() return queryset.filter(ug=v) list_filter = ('user',Ugg,)
4. list_select_related,列表时,连表查询是否自动select_related
5. 分页相关
# 分页,每页显示条数 list_per_page = 100 # 分页,显示全部(真实数据<该值时,才会有显示全部) list_max_show_all = 200 # 分页插件 paginator = Paginator
6. list_editable,列表时,可以编辑的列
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): list_display = ('user', 'pwd','ug',) list_editable = ('ug',)
7. search_fields,列表时,模糊搜索的功能
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): search_fields = ('user', 'pwd')
8. date_hierarchy,列表时,对Date和DateTime类型进行搜索
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): date_hierarchy = 'ctime'
9. preserve_filters,详细页面,删除、修改,更新后跳转回列表后,是否保留原搜索条件
10. save_as = False,详细页面,按钮为“Sava as new” 或 “Sava and add another”
11. save_as_continue = True,点击保存并继续编辑
save_as_continue = True # 如果 save_as=True,save_as_continue = True, 点击Sava as new 按钮后继续编辑。 # 如果 save_as=True,save_as_continue = False,点击Sava as new 按钮后返回列表。 New in Django 1.10.
更多来自:http://www.cnblogs.com/wupeiqi/articles/7444717.html

浙公网安备 33010602011771号