欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Python的web框架中中編寫日志列表的教程

 更新時間:2015年04月30日 11:04:22   作者:廖雪峰  
這篇文章主要介紹了在Python中編寫日志列表的教程,示例代碼基于Python2.x版本,需要的朋友可以參考下

MVVM模式不但可用于Form表單,在復(fù)雜的管理頁面中也能大顯身手。例如,分頁顯示Blog的功能,我們先把后端代碼寫出來:

在apis.py中定義一個Page類用于存儲分頁信息:

class Page(object):
  def __init__(self, item_count, page_index=1, page_size=10):
    self.item_count = item_count
    self.page_size = page_size
    self.page_count = item_count // page_size + (1 if item_count % page_size > 0 else 0)
    if (item_count == 0) or (page_index < 1) or (page_index > self.page_count):
      self.offset = 0
      self.limit = 0
      self.page_index = 1
    else:
      self.page_index = page_index
      self.offset = self.page_size * (page_index - 1)
      self.limit = self.page_size
    self.has_next = self.page_index < self.page_count
    self.has_previous = self.page_index > 1

在urls.py中實現(xiàn)API:

def _get_blogs_by_page():
  total = Blog.count_all()
  page = Page(total, _get_page_index())
  blogs = Blog.find_by('order by created_at desc limit ?,?', page.offset, page.limit)
  return blogs, page

@api
@get('/api/blogs')
def api_get_blogs():
  blogs, page = _get_blogs_by_page()
  return dict(blogs=blogs, page=page)

返回模板頁面:

@view('manage_blog_list.html')
@get('/manage/blogs')
def manage_blogs():
  return dict(page_index=_get_page_index(), user=ctx.request.user)

模板頁面首先通過API:GET /api/blogs?page=?拿到Model:

{
  "page": {
    "has_next": true,
    "page_index": 1,
    "page_count": 2,
    "has_previous": false,
    "item_count": 12
  },
  "blogs": [...]
}

然后,通過Vue初始化MVVM:

<script>
function initVM(data) {
  $('#div-blogs').show();
  var vm = new Vue({
    el: '#div-blogs',
    data: {
      blogs: data.blogs,
      page: data.page
    },
    methods: {
      previous: function () {
        gotoPage(this.page.page_index - 1);
      },
      next: function () {
        gotoPage(this.page.page_index + 1);
      },
      edit_blog: function (blog) {
        location.assign('/manage/blogs/edit/' + blog.id);
      }
    }
  });
}

$(function() {
  getApi('/api/blogs?page={{ page_index }}', function (err, results) {
    if (err) {
      return showError(err);
    }
    $('#div-loading').hide();
    initVM(results);
  });
});
</script>

View的容器是#div-blogs,包含一個table,我們用v-repeat可以把Model的數(shù)組blogs直接變成多行的<tr>:

<div id="div-blogs" class="uk-width-1-1" style="display:none">
  <table class="uk-table uk-table-hover">
    <thead>
      <tr>
        <th class="uk-width-5-10">標(biāo)題 / 摘要</th>
        <th class="uk-width-2-10">作者</th>
        <th class="uk-width-2-10">創(chuàng)建時間</th>
        <th class="uk-width-1-10">操作</th>
      </tr>
    </thead>
    <tbody>
      <tr v-repeat="blog: blogs" >
        <td>
          <a target="_blank" v-attr="href: '/blog/'+blog.id" v-text="blog.name"></a>
        </td>
        <td>
          <a target="_blank" v-attr="href: '/user/'+blog.user_id" v-text="blog.user_name"></a>
        </td>
        <td>
          <span v-text="blog.created_at.toDateTime()"></span>
        </td>
        <td>
          <a href="#0" v-on="click: edit_blog(blog)"><i class="uk-icon-edit"></i>
        </td>
      </tr>
    </tbody>
  </table>
  <div class="uk-width-1-1 uk-text-center">
    <ul class="uk-pagination">
      <li v-if="! page.has_previous" class="uk-disabled"><span><i class="uk-icon-angle-double-left"></i></span></li>
      <li v-if="page.has_previous"><a v-on="click: previous()" href="#0"><i class="uk-icon-angle-double-left"></i></a></li>
      <li class="uk-active"><span v-text="page.page_index"></span></li>
      <li v-if="! page.has_next" class="uk-disabled"><span><i class="uk-icon-angle-double-right"></i></span></li>
      <li v-if="page.has_next"><a v-on="click: next()" href="#0"><i class="uk-icon-angle-double-right"></i></a></li>
    </ul>
  </div>
</div>

往Model的blogs數(shù)組中增加一個Blog元素,table就神奇地增加了一行;把blogs數(shù)組的某個元素刪除,table就神奇地減少了一行。所有復(fù)雜的Model-View的映射邏輯全部由MVVM框架完成,我們只需要在HTML中寫上v-repeat指令,就什么都不用管了。

可以把v-repeat="blog: blogs"看成循環(huán)代碼,所以,可以在一個<tr>內(nèi)部引用循環(huán)變量blog。v-text和v-attr指令分別用于生成文本和DOM節(jié)點屬性。

完整的Blog列表頁如下:

2015430104720938.png (497×539)

相關(guān)文章

  • python正則表達式中的括號匹配問題

    python正則表達式中的括號匹配問題

    這篇文章主要介紹了python正則表達式中的括號匹配問題,需要的朋友可以參考下
    2014-12-12
  • Python實現(xiàn)爆破ZIP文件(支持純數(shù)字,數(shù)字+字母,密碼本)

    Python實現(xiàn)爆破ZIP文件(支持純數(shù)字,數(shù)字+字母,密碼本)

    這篇文章主要為大家分享了如何利用Python實現(xiàn)破解zip文件的密碼,能實現(xiàn)破解純數(shù)字、數(shù)字+字母、密碼本等種類的密碼,需要的可以參考一下
    2022-03-03
  • 快速查找Python安裝路徑方法

    快速查找Python安裝路徑方法

    這篇文章主要介紹了快速查找Python安裝路徑方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python調(diào)試神器PySnooper的使用

    python調(diào)試神器PySnooper的使用

    這篇文章主要介紹了python調(diào)試神器PySnooper的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 源碼解析python中randint函數(shù)的效率缺陷

    源碼解析python中randint函數(shù)的效率缺陷

    這篇文章主要介紹了源碼解析python中randint函數(shù)的效率缺陷,通過討論?random?模塊的實現(xiàn),并討論了一些更為快速的生成偽隨機整數(shù)的替代方法展開主題,需要的盆友可以參考一下
    2022-06-06
  • Python實現(xiàn)文件夾整理下載

    Python實現(xiàn)文件夾整理下載

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)文件夾整理下載,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2023-09-09
  • 快速部署 Scrapy項目scrapyd的詳細(xì)流程

    快速部署 Scrapy項目scrapyd的詳細(xì)流程

    這篇文章主要介紹了快速部署 Scrapy項目scrapyd的詳細(xì)流程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • pandas ix &iloc &loc的區(qū)別

    pandas ix &iloc &loc的區(qū)別

    這篇文章主要介紹了pandas ix &iloc &loc的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python使用PyNmap進行網(wǎng)絡(luò)掃描的詳細(xì)步驟

    Python使用PyNmap進行網(wǎng)絡(luò)掃描的詳細(xì)步驟

    使用 PyNmap 進行網(wǎng)絡(luò)掃描是一個非常有效的方式,PyNmap 是 Nmap 工具的一個 Python 封裝,它允許你在 Python 腳本中使用 Nmap 的強大功能,本文介紹了如何使用 PyNmap 進行網(wǎng)絡(luò)掃描的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08
  • Python 添加文件注釋和函數(shù)注釋操作

    Python 添加文件注釋和函數(shù)注釋操作

    這篇文章主要介紹了Python 添加文件注釋和函數(shù)注釋操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論