django基础

1. 路由系统

1.1 格式介绍

'''
urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]

参数说明:
 一个正则表达式字符串
 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
 可选的要传递给视图函数的默认参数(字典形式)
 一个可选的name参数
 '''

1.2 匹配开头结束

  正则表达式:

  1. 以**开头,利用^,例如:url(r'^index/', views.index),
  2. 以**结尾,利用$,例如:url(r'index/$', views.index),
  3. 通过域名进行访问,显示默认首页,例如:url(r'^$', views.index),

1.3 无名分组

url(r'^bbs/article/(\d+)/$',views.article_year),
url(r'^bbs/article/(\d+)/(\d+)$',views.article_yearMonth),

def article_year(request,year):
    pass

def article_yearMonth(request,year,month):
    pass 

1.4 有名分组

  在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name 是组的名称,pattern 是要匹配的模式。

url(r'^bbs/article/(?P<year_id>\d+)/(?P<month_id>\d+)$',views.article_yearMonth),

def article_yearMonth(request,month_id,year_id):
    pass

1.5 路由分发

#Including another URLconf
#    1. Import the include() function: from django.conf.urls import url, include
#    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))

from django.conf.urls import include, url

urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^blog/', include('blog.urls')),
]

1.6 反向地址解析

  利用别名,进行地址反向解析

  是在render方法中,进行反向解析的

1.7 Response

Httpresponse()        返回字符串

render(request,template_name,context)
结合一个给定的摸版和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象
参数说明:
    1.request:用于生产响应的请求对象
    2.template_name:要使用的模板的完整名称,可选参数
    3.context:添加到模板上下文的一个字典,默认是一个空字典。例如字典中的某个值是可调用的,视图将在渲染模板之前调用
    4.content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE设置的值
    5.status:响应的状态码。默认为200

redirect(跳转,重定向)
    redirct("/路径/")
    模拟用户点击submit请求:
    请求url:http://127.0.0.1:8000/login/
        1.请求url:/login/ POST
        2.url(r'^login/',app01_views.login,name="login")
        3.login(request):验证, if 成功,redirect("/index/")
    重定向请求
        请求路径:http://127.0.0.1:8000/index/
        1.请求url:/index/ GET
        2.url(r'^index/',app01_views.index,name="index")
        3.index(request):取出数据库数据,渲染到index.html页面
    用户看到的是:渲染的index.html页面
    
    redirect与render的区别:
        redirct发出两次请求
        render发出一次请求 

2. template(模板层)

  模板语言:将具体数据嵌入到前端模板的语言

2.1 模板语言之变量

  语法:

    {{ value }}

<h4>{{s}}</h4>
<h4>列表:{{ l.0 }}</h4>
<h4>列表:{{ l.2 }}</h4>
<h4>字典:{{ dic.name }}</h4>
<h4>日期:{{ date.year }}</h4>
<h4>类对象列表:{{ person_list.0.name }}</h4>

 

  注意:句点符也可以用来引用对象的方法(无参数方法)。

2.2 模板之过滤器

  语法:

    {{obj|filter__name:param}}

  1.default

     一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:

    {{ value|default:"nothing" }}

  2.length

    返回值的长度。它对字符串和列表都起作用。例如:

    {{ value|length }}

    如果 value 是 ['a', 'b', 'c', 'd'],那么输出是 4。

  3.filesizeformat

    将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:

    {{ value|filesizeformat }}

    如果 value 是 123456789,输出将会是 117.7 MB。  

  4.date

    如果 value=datetime.datetime.now()

    {{ value|date:"Y-m-d" }}  

  5.slice

    如果 value="hello world"

    {{ value|slice:"2:-1" }}

  6.truncatechars

    如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。

    参数:要截断的字符数

    例如:

    {{ value|truncatechars:9 }}

  7.safe

    Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。例如:

    value="<a href="">点击</a>"

    {{ value|safe}}

3. Model

  ORM是数据库表与类的映射关系

  映射关系:

    表名         <------->         类名

    字段         <------->         属性

    表记录     <------->         类实例对象

  通过logging可以查看翻译成的sql语句

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
} 

3.1 查询

  查询所有

bookList = models.Book.objects.all()

  进行模糊查询

bookList = models.Book.objects.filter(title__contains=keyword)

3.2 增加

  方式一:

models.Book.objects.create(title=title,pubDate=pubdate)

  方式二:

book_obj = Book(title="西游记", pubdate=pubdate)
book_obj.save()

3.3 删除

models.Book.objects.filter(id=id).delete()

3.4 编辑

models.Book.objects.filter(id=id).update(title=title,pubdate=pubdate)

3.5 列表序号

    {% for book_obj in bookList %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ book_obj.title }}</td>
            <td>{{ book_obj.pubDate|date:"Y-m-d" }}</td>
            <td>{{ book_obj.price }}</td>
            <td>{{ book_obj.publish }}</td>
            <td>
                <a href="/edit/{{ book_obj.id }}"><button class="btn btn-info">编辑</button></a>
                <a href="/del/{{ book_obj.id }}"><button class="btn btn-danger">删除</button></a>
            </td>
        </tr>
    {% endfor %}
posted @ 2017-11-09 20:52  平凡执着  阅读(177)  评论(0编辑  收藏  举报