zoukankan      html  css  js  c++  java
  • Django基础知识

    4.ORM(关系对象映射)操作:

    1.创建类
    
    
    在数据库中操作数据:
    
        创建数据:
            1.models.UserInfo.objects.ceate(username='root',password='123')
            2.dic={'username':'root','password':'123'}
              models.UserInfo.objects.ceate(**dic)
            3.obj = models.UserInfo(username='root',password='123')
              obj.save()
         查找数据:
            1. result = models.UserInfo.objects.all()
             for row in result:
                print(row.id,row.name)
            2.result = models.UserInfo.objects.filter(username='root')
        删除数据:
            models.UserInfo.objects.filter(id=4).delete()
        更新数据:
            models.UserInfo.objects.filter(id=4).update(password='12343')
    
    
    2.根据类对数据库表中的数据进行各种操作
    
    http://www.cnblogs.com/wupeiqi/articles/5246483.html
    

    视图层
    两种匹配方式:
    1.path

    from django.urls import path, re_path

    from . import views

    urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P[0-9]{4})/(', views.year_archive), re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/)', views.month_archive),
    re_path(r'^articles/(?P[0-9]{4})/(?P[0-9]{2})/(?P[w-]+)/$', views.article_detail),
    ]

    2.re_path

    from django.urls import re_path

    urlpatterns = [
    re_path(r'^blog/(page-(d+)/)?(', blog_articles), # bad re_path(r'^comments/(?:page-(?P<page_number>d+)/)?)', comments), # good
    ]

    指定视图参数的默认值:

    URLconf

    from django.urls import path

    from . import views

    urlpatterns = [
    path('blog/', views.page),
    path('blog/pageint:num/', views.page),
    ]

    View (in blog/views.py)

    def page(request, num=1):
    # Output the appropriate page of blog entries, according to num.
    ...

    在上面的示例中,两个URL模式都指向同一个视图 views.page- 但第一个模式不会从URL捕获任何内容。如果第一个模式匹配,该page()函数将使用它的默认参数num,1。如果第二个模式匹配, page()将使用num捕获的任何值。

    分级url:

    from django.urls import include, path

    urlpatterns = [
    # ... snip ...
    path('community/', include('aggregator.urls')),
    path('contact/', include('contact.urls')),
    # ... snip ...
    ]

    可以通过仅指定一次公共路径前缀并对不同的后缀进行分组来改进这一点:

    from django.urls import include, path
    from . import views

    urlpatterns = [
    path('<page_slug>-<page_id>/', include([
    path('history/', views.history),
    path('edit/', views.edit),
    path('discuss/', views.discuss),
    path('permissions/', views.permissions),
    ])),
    ]

    下一级url可以从父级url得到参数:

    In settings/urls/main.py

    from django.urls import include, path

    urlpatterns = [
    path('/blog/', include('foo.urls.blog')),
    ]

    In foo/urls/blog.py

    from django.urls import path
    from . import views

    urlpatterns = [
    path('', views.blog.index),
    path('archive/', views.blog.archive),
    ]

    传递额外选项来查看功能:
    path()函数可以采用可选的第三个参数,该参数应该是传递给视图函数的额外关键字参数的字典。

        from django.urls import path
        from . import views
    
        urlpatterns = [
            path('blog/<int:year>/', views.year_archive, {'foo': 'bar'}),
        ]
        在这个例子中,对于请求/blog/2005/,Django将调用 views.year_archive(request, year=2005, foo='bar')
    
        处理冲突
    
        可以使用URL模式捕获命名关键字参数,并在其额外参数字典中传递具有相同名称的参数。发生这种情况时,将使用字典中的参数而不是URL中捕获的参数。
    

    将额外选项传递给include():

    第一种:

    main.py

    from django.urls import include, path

    urlpatterns = [
    path('blog/', include('inner'), {'blog_id': 3}),
    ]

    inner.py

    from django.urls import path
    from mysite import views

    urlpatterns = [
    path('archive/', views.archive),
    path('about/', views.about),
    ]

    第二种:

    main.py

    from django.urls import include, path
    from mysite import views

    urlpatterns = [
    path('blog/', include('inner')),
    ]

    inner.py

    from django.urls import path

    urlpatterns = [
    path('archive/', views.archive, {'blog_id': 3}),
    path('about/', views.about, {'blog_id': 3}),
    ]

    请注意,无论行的视图是否实际接受这些选项为有效,额外选项将始终传递到包含的URLconf中的每一行。因此,只有在您确定所包含的URLconf中的每个视图都接受您传递的额外选项时,此技术才有用。

    url的反向解析:

    从标识相应的Django视图以及将传递给它的参数值开始,获取关联的URL
    三种方法:
    在模板中:使用url模板标记。
    在Python代码中:使用该reverse()函数。
    在与处理Django模型实例的URL相关的更高级代码中:该get_absolute_url()方法。

    例子:
    from django.urls import path

    from . import views

    urlpatterns = [
    #...
    path('articles/int:year/', views.year_archive, name='news-year-archive'),
    #...
    ]
    根据这种设计,对应于年度归档文件的URL NNNN 是/articles//。

    您可以使用以下方法在模板代码中获取这些:

    2012 Archive
    {# Or with the year in a template context variable: #}

    或者在Python代码中:

    from django.http import HttpResponseRedirect
    from django.urls import reverse

    def redirect_to_year(request):
    # ...
    year = 2006
    # ...
    return HttpResponseRedirect(reverse('news-year-archive', args=(year,)))

    如果由于某种原因决定应该更改发布年度文章档案的内容的URL,那么您只需要更改URLconf中的条目。

    在视图具有通用性的某些情况下,URL和视图之间可能存在多对一关系。对于这些情况,当转换URL时,视图名称不是足够好的标识符。阅读下一节,了解Django为此提供的解决方案。

    模板
    HTML静态内容
    动态插入内容

    变量:{{ }}
    标签:{% %}

    过滤器:{{django|title}}

    变量查找: 字典查找。例:foo["bar"]
    属性查找: 例:foo.bar
    列表索引查找: 例:foo[bar]

    反向解析:
    为什么要反向解析:
    根本正则生成url:
    {% url 'namespace:name'参数%}

    HTML转义:视图中传入模板则转义,
    模板中定义的不转义

    分页的前一页和后一页的链接:

    在哪一页就不显示链接:在模板中进行判断

    秋来凉风起,无限思远人
  • 相关阅读:
    Jenkins 的安装部署
    Python /usr/bin/python
    java学习基础 项目
    Java 并行与并发
    c# 将一个窗体显示在主窗体中
    java.io.IOException: open failed: EACCES (Permission denied) 问题解决
    android中创建模拟器的 SDCard
    Android学习笔记__2__Android工程目录结构
    Android学习笔记__3__Android应用程序组成
    Android学习笔记__1__Android体系架构
  • 原文地址:https://www.cnblogs.com/lalavender/p/10444255.html
Copyright © 2011-2022 走看看