在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對應關系里,將視圖函數變為元組,按照固定格式去實現