• 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 %} 
  • 相关阅读:
    How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
    Android中MVC、MVP、MVVM具体解释
    破坏性创新第一原则
    Android学习笔记(八)——显示运行进度对话框
    Hadoop知识汇总
    mybatis collection和association使用区别
    mybatis $和#
    IDEA新建一个多maven模块工程(有图)
    可输入的下拉框
    springboot 使用i18n进行国际化
  • 原文地址:https://www.cnblogs.com/1a2a/p/7953677.html
Copyright © 2020-2023  润新知