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

    在作models以前,最好將https://docs.djangoproject.com/en/1.6/  中的the model layer 細讀。
python

    (一)瑣碎

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

        在Django中常常見到含有這兩個參數的函數。*args可表明任意個參數:func(arg, *args)表明這個函數能夠有一個或更多個參數。能夠理解成一個參數list。**kwargs能夠表明任意個K=V形式的參數。大致就是這樣。linux

        (2)不經意間,被MySQL的編碼折磨。Ubuntu下修改一直有問題。sql

        頭痛。折騰了半天仍是沒搞好,修改/etc/mysql/my.cnf 文件後,重啓Mysql服務失敗,改回去就能夠。可是字符集問題仍是沒搞好。暫時先用着SQLite3吧。:-(shell


        找到修改方案了。以前網上的教程有些錯誤。數據庫

        使用:status 查看數據庫信息,也可以使用 mysql>  show variables like 'character%';
django

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權限
ubuntu

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

      而後重啓MySQL服務便可session

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:app

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

相關文章
相關標籤/搜索