在form表单里面 autocomplete="off" 浏览器输入框关闭自动提示
在ajax里面要发送文件数据需要实例化一个FormData()对象,
还需要设置
processData:false, //告诉jQuery不要处理我的数据
contentType:false, //告诉jQuery不要设置content类型
实现示例代码:
1 //用户点击注册触发ajax 2 $("#reg-btn").click(function () { 3 //获取用户填写的注册数据,向后端发送ajax请求 4 //发送文件数据时必须 用FormData()的对象 5 var formData=new FormData(); 6 formData.append('username',$("#id_username").val()); 7 formData.append('password',$("#id_password").val()); 8 formData.append('re_password',$("#id_re_password").val()); 9 formData.append('email',$("#id_email").val()); 10 formData.append('profile',$("#id_profile")[0].files[0]); 11 formData.append('csrfmiddlewaretoken',$("[name='csrfmiddlewaretoken']").val()); 12 $.ajax({ 13 url:'/register/', 14 type:'post', 15 processData:false, //告诉jQuery不要处理我的数据 16 contentType:false, //告诉jQuery不要设置content类型 17 data:formData, 18 success:function (data) { 19 if(data.status){ //如果status有值 登录失败 显示错误信息 20 $.each(data.msg,function (k,v) { 21 //遍历获取错误信息,并按id设置span标签的内容 22 $('#id_'+k).next('span').text(v[0]).parent().parent().addClass('has-error'); 23 }) 24 } 25 else { 26 location.href=data.msg; //如果没有错误就跳转到指定页面 27 } 28 } 29 }) 30 });
如果想打印orm转换过程中的sql,需要在settings中进行如下配置:
1 LOGGING = { 2 'version': 1, 3 'disable_existing_loggers': False, 4 'handlers': { 5 'console':{ 6 'level':'DEBUG', 7 'class':'logging.StreamHandler', 8 }, 9 }, 10 'loggers': { 11 'django.db.backends': { 12 'handlers': ['console'], 13 'propagate': True, 14 'level':'DEBUG', 15 }, 16 } 17 }
Django框架的admin后台页面如果想要实现汉化需要设置的参数:
在setting文件里面配置:
1 LANGUAGE_CODE = 'zh-hans'
能实现普通管理页面效果汉化,但是如果要使数据库类或者对象属性也实现汉化:
1 class AuthorDetail(models.Model): 2
3 nid = models.AutoField(primary_key=True) 4 birthday=models.DateField(verbose_name="生日") 5 telephone=models.BigIntegerField(verbose_name="手机") 6 addr=models.CharField( max_length=64,verbose_name="地址") 7
8 class Meta: 9 verbose_name = "作者信息"
10 verbose_name_plural = verbose_name 11
12 def __str__(self): 13 return '{}-{}'.format(self.pk,self.telephone)
完成上述几部参数设置后,就完全汉化可用了
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
django后台管理页面如果想修改自定义字段:
可以在admin文件里面配置
1 from django.utils.safestring import mark_safe #让Django不要转移字符
2 class BookConfig(admin.ModelAdmin): 3 def del_book(self): 4 return mark_safe("<a href=''>删除</a>") #返回的结果作为字段给 list_display使用 mark_safe让django别转义字符串
5 list_display = ["pk","title","publishDate","price","publish",del_book] #需要显示的对象属性
6 list_display_links =["title"] #把哪个标签设置为链接入口
7 list_filter = ["publish","authors"] #按照规定字段筛选过滤
8 search_fields = ["title","price","publish__name"] #这里面的字段也是可以跨表找字段的 按照规定字段模糊匹配检索
9
10 def change_price(self,request,queryset): #自定义批处理函数
11 queryset.update(price=88) #更新价格为88
12 change_price.short_description = "价格批量初始化"
13 actions = [change_price,] #添加到actions里面去
14
15 admin.site.register(Book,BookConfig)
Admin的实现流程:
1.启动admin 在程序启动后会扫描对应的方法,去执行加载
1 def autodiscover(): 2 autodiscover_modules('admin', register_to=site)
所谓聚合函数:就是在不分组的情况下进行统计!
ORM
关键点:1.queryset对象.annotate
2.annotate进行分组统计 按照select (相当于values)的字段进行group by
3.annotate返回值依旧是queryset对象,增加了分组统计之后的键值对
2.在admin文件里面注册模块对象
1 class AuthorConfig(admin.ModelAdmin): 2 def author_del(self,obj): 3 return mark_safe("<a href=''>删除</a>") 4
5 list_display = ["pk","name","age","authorDetail","author_del"] 6 list_display_links = ["name"] 7 list_filter = ["age"] 8
9
10 admin.site.register(Author,AuthorConfig) 11 admin.site.register(AuthorDetail) 12
13 class BookConfig(admin.ModelAdmin): 14 def del_book(self): 15 return mark_safe("<a href=''>删除</a>") #返回的结果作为字段给 list_display使用 mark_safe让django别转义字符串
16 list_display = ["pk","title","publishDate","price","publish",del_book] #需要显示的对象属性
17 list_display_links =["title"] #把哪个标签设置为链接入口
18 list_filter = ["publish","authors"] #按照规定字段筛选过滤
19 search_fields = ["title","price","publish__name"] #这里面的字段也是可以跨表找字段的 按照规定字段模糊匹配检索
20
21 def change_price(self,request,queryset): #自定义批处理函数
22 queryset.update(price=88) #更新价格为88
23 change_price.short_description = "价格批量初始化"
24 actions = [change_price,] #添加到actions里面去
25
26 admin.site.register(Book,BookConfig) 27 admin.site.register(Publish)
3.分配urls路径地址,在urls文件里面完成对应关系:
有一级分配与二级分配:
1 from django.conf.urls import url 2 from django.contrib import admin 3 from apk import views 4 from django.shortcuts import HttpResponse 5 def test1(request): 6 return HttpResponse("test1") 7
8 def add_list(request): 9 return HttpResponse("add_test1") 10
11 def del_list(request,id): 12 print(id) 13 return HttpResponse("del_test1") 14
15 def change(request,id): 16 return HttpResponse("change_test1") 17
18 def show_list(request): 19 return HttpResponse("show_test1") 20
21 def functions(): 22 fun_list=[] 23 fun_list.append(url(r'^$',show_list)) 24 fun_list.append(url(r'^add/$', add_list)) 25 fun_list.append(url(r'^(\d+)/del/$', del_list)) 26 fun_list.append(url(r'^(\d+)/change/$',change)) 27 return fun_list 28
29 def get_urls(): 30 print(admin.site._registry) 31 temp=[] 32
33 for model,admin_class_obj in admin.site._registry.items(): #对注册的组件键与值进行迭代,得到类对象和实例对象
34 app_name=model._meta.app_label #app名字
35 model_name=model._meta.model_name #模型对应名字
36 temp.append(url(r'^{0}/{1}/'.format(app_name,model_name),(functions(),None,None)),) 37
38 return temp 39 urlpatterns = [ 40 url(r'^admin/', admin.site.urls), 41
42 url(r'^index/',views.show), 43
44 url(r'^kevin/',(get_urls(),None,None)), 45 ]
在url对应关系里,将视图函数变为元组,按照固定格式去实现
