django知识点回顾(上)


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()



{% url' '%}(可以有参数)  , {% extends "base.html"
{% load my_tags %} 
原文地址:https://www.cnblogs.com/1a2a/p/7953677.html