Python 系列(22) django 自定义过滤器和定制后台

Posted on Posted in python

关于 request

mydjango/urls.py

  1. url(r'^request', views.request_test),    

app01/views.py

  1. # encoding:utf-8    
  2. from django.shortcuts import render, HttpResponse, render_to_response    
  3. from . import models    
  4. from . import form    
  5.     
  6. def request_test(request):    
  7.     print(request.META) # 输入request的所有信息    
  8.     for k,v in request.META.items():    
  9.         print('%s-----%s' % (k, v))    
  10.     # http://192.168.1.250:8000/request?hostname=192.168.1.123    
  11.     print(request.path) # 输出 /request    
  12.     print(request.get_full_path()) # 输出 /request?hostname=192.168.1.123    
  13.     print(request.get_host()) # 192.168.1.250:8000    
  14.     return render(request,'request_test.html')    

templates/request_test.html

  1. <!DOCTYPE HTML>    
  2. <html lang="zh">    
  3. <head>    
  4.     <meta charset="utf-8">    
  5.     <title>request_test</title>    
  6. </head>    
  7. <body>    
  8. request_test    
  9. </body>    
  10. </html>    

自定义过滤器

  1. app01/    
  2. ├── templatetags # 这是一个固定的包,名字固定    
  3.      └── __init__.py    
  4.      └── tr.py # 过滤器函数    

mydjango/urls.py

  1. url(r'^tr_test/(\w+)', views.tr),    

templatetags/tr.py

  1. # encoding:utf-8    
  2. from django import template # 导入django的模板    
  3.     
  4. register = template.Library() # 注册    
  5. def tr(value): # value 是html模板传入的值,要处理的数据    
  6.     print(isinstance(value, str))    
  7.     if isinstance(value, unicode): # 判断value是不是str类型的,返回true和false    
  8.         print("isinstance====")    
  9.         if value.islower():    
  10.             print("upper")    
  11.             return value.upper()    
  12.         else:    
  13.             print("lower")    
  14.             return value.lower()    
  15.     
  16. register.filter('tr_request',tr) # 第一个参数,在html模板中要写入的名字tr_request.第二个参数写要处理的函数    

template/tr.html

  1. <!DOCTYPE HTML>    
  2. {% load tr %} <!--导入过滤函数包-->    
  3. <html lang="zh">    
  4. <head>    
  5.     <meta charset="utf-8">    
  6.     <title>tr page</title>    
  7. </head>    
  8. <body>    
  9. {{ data | tr_request }} # tr_request,是上面tr.py里定义的名字    
  10. </body>    
  11. </html>    

定制后台

app01/admin.py

  1. from django.contrib import admin    
  2. from . import models    
  3.     
  4. # 增加后台显示的字段名    
  5. class BookAdmin(admin.ModelAdmin):    
  6.         list_display = ('id','name','publisher','publisher_date') # name 对应 models.py 里定义的 "name=",不支持多对多,所以没有author。http://192.168.1.250:8000/admin/app01/book/    
  7.         search_fields = ('name','publisher__name') # 搜索框 http://192.168.1.250:8000/admin/app01/book/    
  8.         list_filter = ('name','publisher') # 增加右侧sidebar的加号列表 http://192.168.1.250:8000/admin/app01/book/    
  9.         list_editable = ('name','publisher_date') # 增加后台直接编辑表数据 http://192.168.1.250:8000/admin/app01/book/    
  10.         list_per_page = 2 # 每页显示2条数据 http://192.168.1.250:8000/admin/app01/book/    
  11.         filter_horizontal = ('author',) # 选取多个作者的时候,可以过滤添加。只能适用于多对多的表。(点击html页面的id号,出现效果) http://192.168.1.250:8000/admin/app01/book/9/change/    
  12.         raw_id_fields = ('publisher',) # 增加出版社搜索 http://192.168.1.250:8000/admin/app01/book/9/change/    
  13.         date_hierarchy = 'publisher_date' # 表主页出现年选项 http://192.168.1.250:8000/admin/app01/book/    
  14.     
  15. class AuthorAdmin(admin.ModelAdmin):    
  16.         list_display = ("name",'email')    
  17.     
  18. # Register your models here.    
  19. admin.site.register(models.Book,BookAdmin) # 把上面的BookAdmin注册进去    
  20. admin.site.register(models.Author,AuthorAdmin)    

app01/models.py

  1. class Book(models.Model):    
  2.     name = models.CharField(max_length=128, verbose_name='书名')    
  3.     author = models.ManyToManyField('Author',verbose_name='作者') # 多对多的关系,关联到Author    
  4.     publisher = models.ForeignKey('Publisher', verbose_name='出版社')    
  5.     publisher_date = models.DateField(verbose_name = '出版时间') # models.DateTimeField 精确到秒,models.DateField 精确到天    
  6.     
  7.     def __str__(self):    
  8.         return self.name    

改超级用户密码

  1. python manage.py changepassword roro    

Leave a Reply

Your email address will not be published. Required fields are marked *

20 + three =