专栏首页若是烟花七日Python之路--第九天(blog与Django)

七日Python之路--第九天(blog与Django)

在做models之前,最好将https://docs.djangoproject.com/en/1.6/ 中的the model layer 细读。

(一)琐碎

(1)*args和**kwargs。的使用

在Django中经常见到含有这两个参数的函数。*args可代表任意个参数:func(arg, *args)代表这个函数可以有一个或更多个参数。可以理解成一个参数list。**kwargs可以代表任意个K=V形式的参数。大体就是这样。

(2)不经意间,被MySQL的编码折磨。Ubuntu下修改一直有问题。

头痛。折腾了半天还是没搞好,修改/etc/mysql/my.cnf 文件后,重启Mysql服务失败,改回去就可以。但是字符集问题还是没搞好。暂时先用着SQLite3吧。:-(


找到修改方案了。之前网上的教程有些错误。

使用:status 查看数据库信息,也可使用 mysql> show variables like 'character%';

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (i686) using readline 6.2

Connection id:        36
Current database:    
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.5.38-0ubuntu0.12.04.1 (Ubuntu)
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:            2 min 39 sec

然后修改/etc/mysql/my.cnf 数据库配置文件。 需要使用root权限

在[client]节点下添加         
    default-character-set=utf8 
在[mysqld]节点下添加        
    character-set-server=utf8        
    collation-server=utf8_general_ci

然后重启MySQL服务即可

root@dizzy-pc:/home/dizzy# service mysql restart
mysql stop/waiting
mysql start/running, process 3233

(二)Blog
(1)暂且叫做Dlog吧。创建项目及应用。第一步毫无疑问,配置settings.py .使用MySQL数据库。
"""
Django settings for mysite project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '4@01u6jlly!dr*x&91$p@bqo4w(%0t0g8zp+6g9s650(&glpkv'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #add by dizzy in 2014-07-29 19:36:23
    'dlog',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'mysite.urls'

WSGI_APPLICATION = 'mysite.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dlog',
        'USER': 'root',
        'PASSWORD':'944898186',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'zh-cn'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_URL = '/static/'
(2)创建dlog应用,并设置models.py。如下,当然这只是初步设置
#coding=utf-8
from django.db import models

# Create your models here.

class BaseModel(models.Model):
    name = models.CharField(u'名称', max_length=20)
    crttime = models.DateTimeField(u'创建时间',auto_now_add=True)
    def __unicode__(self):
        return self.name

    class Meta:
        abstract=True

class Author(BaseModel):

    class Meta:
        db_table = 'dlog_author'
        verbose_name = u'作者'

class Theme(BsaeModel):

    class Meta:
        db_table = 'dlog_theme'
        verbose_name = u'主题'

class Tag(BaseModel):

    class Meta:
        db_table = 'dlog_tage'
        verbose_name = u'标签'

class Category(BaseModel):

    class Meta:
        db_table = 'dlog_category'
        verbose_name = u'分类'

class Article(BaseModel):
    title = models.CharField(u'标题', max_length=100)
    author = models.ForeignKey(Author, verbose_name=u'作者')
    theme = models.ForeignKey(Theme, verbose_name=u'主题')
    tags = models.ManyToManyField(Tag, blank=True, verbose_name=u'标签')
    category = models.ForeignKey(Category, verbose_name=u'分类')
    abstract = models.TextField(u'摘要')
    created_time = models.DateTimeField(u'创建时间', auto_now_add=True)
    updated_time = models.DateTimeField(u'修改时间', auto_now=True)
    content = models.TextField(u'正文')
    click_count = models.IntegerField(u'点击量', default=0, editable=False)
    comment_count = models.IntegerField(u'评论数',default=0, editable=False)
    def __unicode__(self):
        return self.title

    def click(self):
        pass

    class Meta:
        db_table = 'dlog_article'
        verbose_name = u'文章'

对应的SQL:

dizzy@dizzy-pc:~/dizzy/mysite$ ./manage.py sql dlog
BEGIN;
CREATE TABLE `dlog_author` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(20) NOT NULL,
    `crttime` datetime NOT NULL
)
;
CREATE TABLE `dlog_theme` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(20) NOT NULL,
    `crttime` datetime NOT NULL
)
;
CREATE TABLE `dlog_tage` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(20) NOT NULL,
    `crttime` datetime NOT NULL
)
;
CREATE TABLE `dlog_category` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(20) NOT NULL,
    `crttime` datetime NOT NULL
)
;
CREATE TABLE `dlog_article_tags` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `article_id` integer NOT NULL,
    `tag_id` integer NOT NULL,
    UNIQUE (`article_id`, `tag_id`)
)
;
ALTER TABLE `dlog_article_tags` ADD CONSTRAINT `tag_id_refs_id_e377ffd2` FOREIGN KEY (`tag_id`) REFERENCES `dlog_tage` (`id`);
CREATE TABLE `dlog_article` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(20) NOT NULL,
    `crttime` datetime NOT NULL,
    `title` varchar(100) NOT NULL,
    `author_id` integer NOT NULL,
    `theme_id` integer NOT NULL,
    `category_id` integer NOT NULL,
    `abstract` longtext NOT NULL,
    `createdtime` datetime NOT NULL,
    `updatedtime` datetime NOT NULL,
    `content` longtext NOT NULL,
    `click_count` integer NOT NULL,
    `comment_count` integer NOT NULL
)
;
ALTER TABLE `dlog_article` ADD CONSTRAINT `author_id_refs_id_c7985c8d` FOREIGN KEY (`author_id`) REFERENCES `dlog_author` (`id`);
ALTER TABLE `dlog_article` ADD CONSTRAINT `category_id_refs_id_b7340953` FOREIGN KEY (`category_id`) REFERENCES `dlog_category` (`id`);
ALTER TABLE `dlog_article` ADD CONSTRAINT `theme_id_refs_id_d135d084` FOREIGN KEY (`theme_id`) REFERENCES `dlog_theme` (`id`);
ALTER TABLE `dlog_article_tags` ADD CONSTRAINT `article_id_refs_id_61edf8a3` FOREIGN KEY (`article_id`) REFERENCES `dlog_article` (`id`);

COMMIT;
(3)设置下admin后台显示部分。

-- 2014年07月30日03:17:31

#coding=utf-8
from django.contrib import admin
from models import Article,Author,Theme,Tag,Category
# Register your models here.

class ArticleAdmin(admin.ModelAdmin):
    fields = ['title', 'author', 'abstract', 'theme', 'category',
              'content', 'tags']
    list_display = ['id','title', 'theme', 'category', 'tag_display',
                    'created_time', 'click_count', 'comment_count']
    list_editable = ['title','theme','category']
    list_filter = []
    list_display_links = ['id']
    search_fields = ['title']
    def tag_display(self, obj):
        return ','.join([tag.name for tag in obj.tags.all()])
    tag_display.short_description=u'标签'

class CAdmin(admin.ModelAdmin):
    fields = ['name']
    list_display = ['name', 'crttime']

admin.site.register(Article, ArticleAdmin)
admin.site.register([Author, Theme, Tag, Category],CAdmin)

这样后台显示部分基本可以了。

这样更新貌似不太好,等初步完成之后传到GitHub上分享吧.....

-- 2014年07月30日16:11:28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • zookeeper集群搭建

    整体的搭建十分简单,只需要区别一些各个实例的dataDir和clientPort配置信息即可。

    lpe234
  • 自动返回笑话接口调用之微信公众平台(二)

    在InputStreamReader(InputStream in, Charset cs) 中,将编码设置为“UTF-8”即可

    lpe234
  • 七日Python之路--第三天(之初试Django 2-1)

    #意外情况出现,以为电脑硬盘真的坏掉了。原来是忘记插电源 @。@ ~ 前些时间玩游戏,电脑无故突然断电关机,再开机一闪便又突然断电关机。最终找到原因,电脑过热,...

    lpe234
  • 四、Django关系表字段介绍

    Dreamy.TZK
  • 带你了解一下神奇的Github

    有没有发现,github这个词越来越多出现在你的生活和工作中。程序员在讨论github,因为据说好的程序员都在用github。做机器学习的在讨论github,因...

    HuangWeiAI
  • cssjshtml vue.js v-for 过滤并排序

    vue.js computed 利用逗号实现 vue.js 先排序再过滤,关键点在于:顺序不能为先过滤再排序。

    葫芦
  • opencv学习笔记--色彩空间转换

    用户2965768
  • GitHub上能让你重拾学习热情的AI项目:权游预测/AI作画/与AlphaZero对弈

    4月15号《权力的游戏》第八季开播啦!从第一季开始,就有同学告诉小编“永远猜不出来主角是谁,你以为他是主角?不好意思,下集就领便当了” 。

    Datawhale
  • GitHubDaily 周报第 94 期

    后续本公众号每周会更新一期周报,汇总每周在微博分享的一些开源项目。之前分享过的周报可前往 GitHub 查看。

    GitHubDaily
  • 最近比较火的三个GAN应用及代码--Pix2pix

    Pix2pix是一个全新的工具,旨在允许任何类型的图像变换的应用程序无关的训练。所需要的是包含图像对A和B的数据集,并且可以训练网络以变换到任一方向。可能的应用...

    用户1908973

扫码关注云+社区

领取腾讯云代金券