django paginator实现分页

Abstract

Django是一个由Python写成的开放源代码的Web应用框架。围绕Django也有很多现成的功能包。
这里介绍的paginator实现分页就是其中之一


实例测试

创建好应用(这里以blog应用为例)之后,在应用的view.py中添加如下:

1
2
3
4
from django.core.paginator import Paginator
from django.core.paginator import PageNotFound, EmptyPage
from .models import Post

这里我们需要在blog首页展示所有Post,然后实现分页。

阅读更多

django paginator detail

Abstract

Django提供了一系列类来帮助你管理分页数据。这些类位于django/core/paginator.py
我们可以通过如下测试来了解熟悉paginator的具体用法


阅读更多

python setattr getattr hasattr

摘要

Python 对应属性和方法的判断 hasattr/getattr/setattr


hasattr

判断一个对象里面是否有name属性或者方法,返回值为Boolean值, 有name 返回true,反之false
其等同于`getattr(object, name)

`
hasattr(object, name)

getattr

类似于hasattr(object, name),但是getattr当name不存在于object的时候返回default值。否则返回实际的值

getattr(object, name[, default])

setattr

给对象的属性复制,如果属性不存在,则先创建再赋值

setattr(object, name, value)

阅读更多

mysql5.7之后版本datetime默认值不能设置为0000-00-00的问题

根据报错猜测可能是因为MySQL版本的问题,导出的SQL文件是从MySQL 5.6导出的, 目前Mac上面的MySQL版本是5.7

查询官网发现:

参考地址https://dev.mysql.com/doc/refman/5.7/en/datetime.html

1
2
3
4
5
6
7
8
9
10
11
12
The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD'
format. The supported range is '1000-01-01' to '9999-12-31'.
The DATETIME type is used for values that contain both date and time parts. MySQL retrieves and displays DATETIME values
in 'YYYY-MM-DD HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.
The TIMESTAMP data type is used for values that contain both date and time parts. TIMESTAMP has a range of
'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.

故相关的默认值需要设置成'1000-01-01 00:00:00''9999-12-31 23:59:59' 之间即可

阅读更多

耐人寻味的for-else语句

老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。”当晚,程序员老公手捧一个包子进了家门……老婆怒道:“你怎么就买了一个包子?”老公答曰:“因为看到了卖西瓜的。”


程序员买西瓜的笑话可能大部分读者都知道,今天写的这篇文章和这个笑话有一定的关系。

任何编程语言都提供了 if…else… 语句,表示如果(if)满足条件就做某件事,否则(else)就做另外一件事:

1
2
3
4
if a==b:
print("true")
else:
print("false")

阅读更多

Git配置总结

摘要

之前介绍过一篇如何在Linux环境下部署Git Server服务。具体详见如何在Linux上搭建一个Git中央仓库
在部署安装之后。这里有一些必须的配置和优化性质的配置

配置分类介绍

这里的配置介绍已Linux为标准介绍,Windows或者Mac请自行根据后续方式尝试

  • /etc/gitconfig

    系统级别的Git配置,作用于系统所有用户。

  • ~/.gitconfig

    全局作用域Git配置,全局作用于当前系统用户(推荐配置)

  • project/.git/config

    针对当前项目的Git配置,一般clone项目之后,存在于项目目录下。

阅读更多

Django发布应用application

欢迎访问个人博客

Django deploy application

当Django的application开发完成之后,我们希望能将其作为模块分发出去供别人共享使用

How to write application

安装好Django之后

## create project
django-admin.py startproject mypro

## create app named `todo` (todo list)
cd mypro
python manage.py startapp todo

## configure app(todo) connect with project `mypro`
vim mypro/settings.py

    INSTALLED_APPS = [
        'django.contrib.admin',
         ...,
        'todo',
    ]

vim mypro/urls.py
    from django.conf.urls import url, include

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

How to write setup.py

  • 创建一个父目录

    mkdir -pv /opt/django-todo

阅读更多

jquery禁用a标签

欢迎访问个人博客

阅读更多

Django认证系统介绍

欢迎访问个人博客

Abstract

基础Django我们可以快速的实现用户认证系统


前提

要使用Django的认证系统,首先需要确定一下配置是OK的。
这里使用的是Django 1.11,相关配置在创建好项目的时候已经自动配合好了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## app
INSTALLED_APPS = [
... ...
'django.contrib.auth',
'django.contrib.sessions',
... ...
]
## middleware
MIDDLEWARE = [
... ...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
... ...
]

url 配置

配置登录和登出

1
2
3
4
5
6
7
8
9
10
11
12
13
from django.contrib.auth.views import login, logout_then_login
from . import views
# 登录
# url(r'^accounts/login/$', login),
# 或者登陆的时候指定页面
url(r'^accounts/login/$', login, , {'template_name': 'login.html'})
# 退出登录,并跳转到登录页面
url(r'^accounts/logout/$', logout_then_login),
# index 和 detail 页面作为测试
url(r'^$', views.index, name='index')
url(r'^detail/$', views.detail, name='detail')

默认情况下 login 会去找registration/login.html 页面,我们可以通过指定template_name 来指向自己希望指向的登录页面

阅读更多

Django model 介绍

欢迎访问个人博客

Abstract

Django 模型models是与数据库相关的。Django 为 sqlite3, MySQL, PostgreSQL,Oracle等数据库提供统一的API访问。
与数据库相关的代码一般写在 models.py 中,只需要在settings.py中配置即可,不用更改models.py中的代码。


数据库配置介绍

系统默认给出了sqlite3的配置

1
2
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

这里给出一个MySQL配置的例子

1
2
3
4
5
6
7
8
9
'ENGINE': 'django.db.backends.mysql',
'USER': 'monitor',
'PASSWORD': 'Montor@123',
'HOST': '127.0.0.1',
'PORT': 3306,
'OPTIONS' : {
'init_command': 'SET storage_engine=INNODB',
'charset':'utf8',
}

这里最核心的是ENGINE参数, 通过其确认是我们是用那种数据库引擎
其余配置简单一目了然

阅读更多