django知識點回顧(上)
阿新 • • 發佈:2017-12-02
rect exclude emp os.path 出錯 article 請求 media 記錄
Django---知識點:
1、 配置文件:
media:
avatar = models.FileField(upload_to=‘avatar‘)#數據庫裏的model
MEDIA_ROOT=os.path.join(BASE_DIR,"blog","media","uploads")#settings裏設置
文件上傳:BASE_DIR/"blog"/"media"/"uploads"/avatar/a.png#文件上傳路徑
客戶端:
# media 配置
MEDIA_URL="/media/"
url(r‘^media/(?P<path>.*)$‘, serve, {‘document_root‘: settings.MEDIA_ROOT}),
<img src="/media/avatar/a.png">
2、url配置:(有名分組是鍵值對形式傳參數,無名分組)
url(r‘^articles/([0-9]{4})/$‘, views.year_archive), # year_archive(request,1990)
url(r‘^articles/(?P<year>[0-9]{4})/$‘, views.year_archive), # year_archive(request,year=1990)
3、反向解析:
in urls:
url(r‘^articles/([0-9]{4})/$‘, views.year_archive, name=‘news-year-archive‘),
url(r‘^index/$‘, views.index, name=‘Index‘),
in template(模板反向解析):
<a href="articles/2012/">2012 Archive</a>
<a href="{% url ‘news-year-archive‘ 2012 %}">2012 Archive</a>#帶參數的反向解析
in views(視圖函數反向解析):
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
#return redirect("/index/") # hard code
return HttpResponseRedirect(reverse(‘Index‘))#通過名字可以反向解析和上面的名字相對
4、視圖函數:(表單是鍵值對形式)
請求對象---request:
1、HttpRequest.body: 請求元數據
2、HttpRequest.path:一個字符串,表示請求的路徑組件(不含域名)
3、HttpRequest.method
5、HttpRequest.GET
6、HttpRequest.POST
7、HttpRequest.FILES 這是文件
8、HttpRequest.user : 一個 AUTH_USER_MODEL 類型的對象 這個是用在用django的原生auth表才可以使用
響應對象:
return HttpResponse("") # 返回字符串實例
return render(request,"template",{"":""}) # 返回字符串實例 (**********)render函數渲染成字符串返回前端
return redirect("/index/") # 重定向 (**********)
5、模板語言:
views:
def foo():
name="yuan"
l=[111,222,333]
d={"info":[obj1,obj2]}
returnr render(request,"index.html",locals())
1、變量:{{name}}
---深度查詢 句點符 {{l.0}} {{d.info.0.name}}
----過濾器:{{name|date:"Y-m-d"}}
2、標簽 (for .....empty)和if ....elif
{%for i in l%}
{{i}}
{%empty%}
<p>沒有符合條件的書籍</p>
{%endfor%}
--------
{%if name == "yuan"%}
<p>真帥</p>
{%elif ...%}
{%endif%}
3、繼承模板:
(1) base.html : {%block con%}{%end block con%}
(2) index.html:
{% extends "base.html"%} 繼承 模板
{%block con%}
{{block.super}} 模板盒子中內容
{%end block con%} 覆蓋
6、models(模型) -----ORM
sql中表名--------------python的類名
sql中表的字段----------python的類屬性
sql中表的記錄----------python的類對象
class Article(models.Model):
nid = models.BigAutoField(primary_key=True)
title = models.CharField(max_length=50, verbose_name=‘文章標題‘)
read_count = models.IntegerField(default=0)
單表操作:
添加操作
views:
#方法1:
article_obj=models.Article.objects.create(nid=1,title="yuan",read_count=12) # create方法返回的是當前創建的文章對象
#方法2:
article_obj=models.Article(nid=1,title="yuan",read_count=12)#這是創建一個對象
article_obj.save()
刪除:
models.Article.objects.filter(title="python").delete() # 默認級聯刪除
修改:
models.Article.objects.filter(title="python").update(read_count=F("read_count")+10)
查詢API:
<1> all(): 查詢所有結果 #QuerySet
<2> filter(**kwargs): 它包含了與所給篩選條件相匹配的對象 #QuerySet
<3> get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,
如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。 # model對象
<5> exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象 #QuerySet
<4> values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行後得到的並不是一系列
model的實例化對象,而是一個可叠代的字典序列 #QuerySet
<9> values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列 #QuerySet
<6> order_by(*field): 對查詢結果排序 #QuerySet
<7> reverse(): 對查詢結果反向排序 #QuerySet
<8> distinct(): 從返回結果中剔除重復紀錄 #QuerySet
<10> count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。 # int
<11> first(): 返回第一條記錄 # model對象
<12> last(): 返回最後一條記錄 # model對象
<13> exists(): 如果QuerySet包含數據,就返回True,否則返回False
querySet支持鏈式操作:
models.Article.objects.all().filter().values().distinct().count()
django知識點回顧(上)