惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
美团技术团队
H
Hacker News: Front Page
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tenable Blog
Simon Willison's Weblog
Simon Willison's Weblog
T
The Exploit Database - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
C
CXSECURITY Database RSS Feed - CXSecurity.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
A
About on SuperTechFans
F
Fortinet All Blogs
量子位
GbyAI
GbyAI
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
Forbes - Security
Forbes - Security
Help Net Security
Help Net Security
I
InfoQ
有赞技术团队
有赞技术团队
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Secure Thoughts
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Webroot Blog
Webroot Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园_首页
C
Check Point Blog
T
Troy Hunt's Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Latest news
Latest news
P
Proofpoint News Feed
Jina AI
Jina AI
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
雷峰网
雷峰网
博客园 - Franky
L
LangChain Blog
罗磊的独立博客
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
D
Docker
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

isaced

使用 TypeScript 构建的 appstore-connect-sdk 归档 我用 SwiftUI 写了一个 V2ex 客户端 Docker 容器化多应用部署 Swift Server-side SDWebImage 为什么无法读取 webpmux 生成的 WebP 动图? [译] 探索 Swift 4 中新的 String API 对一个 Django 站点做 ab 压力测试 fir-mac 开发笔记 iOS10 Safari 引导用户信任企业签名 Swift Web 开发之 Vapor - 模版 Leaf(三) Swift Web 开发之 Vapor - 路由(二) HoloLens 初体验 Swift Web 开发之 Vapor - 入门(一) Jenkins for iOS 搭建日记 iOS HOOK 注入与重签名 Xcode 使用 Configuration 来配置不同的项目环境 图床从SAE迁移到七牛 给 UIProgressView 脱掉那层微弱的渐变 初用 CocoaAsyncSocket 记一次 SQLite 性能优化 有多色 - 开发小记 海岛风情 - 泰国普吉岛六日游 EGOCache 源码解析 日语五十音假名临摹校验算法 [iOS] UITextView 追加文字自动跳到顶部解决方法 Cocoa 新的依赖管理工具:Carthage 新年快乐! 博客主机换到搬瓦工 写了个iOS小游戏:有多色 iOS 后台任务之 Long-running background task 悄悄的就必须用 XCode 5.1.1 上传了! HTTP Content-type 与 AFNetworking Objective-Cloud 初体验(1) 掌中站上架小记 NSLoger 上线了 Python Markdown 做语法限制 Nginx + Gunicorn + Django 部署小记 用Shell脚本批量裁剪App Icon各个尺寸 LaunchRocket使用小记 用宏提速NSCoding 2014新年伊始:近期读过的好文推荐 [iOS] stringWithFormat 和 initWithFormat 有何不同? Apache + Flask + mod_wsgi + Koding 部署小记 收集几个Objective-C的HTML解析库 NSMapTable: 不只是一个能放weak指针的 NSDictionary 2013,再见! Emlog到Typecho的迁移工具:emlog2typecho [iOS]给上拉下拉刷新PullToRefresh做本地化 [iOS]代码推荐:大图缩放视图 - Vertigo iOS:hidesBottomBarWhenPushed的正确用法 Xcode 5新的Interface Builder,你准备好了吗? 我的Mac音乐播放器 初识 NSDataDetector Objective-C 计算代码运行时间 WordPress上传文件自动重命名 iOS:仿jing.fm的音乐播放视图 我的啃黑苹果之路 关于 搜索 项目
[翻译]如何使用Django创建简单的博客
2013-08-18 · via isaced

最近在学习 Django,看到一篇不错的入门教程,小译一下,想学习 Django 的新手朋友们可以凑合看看。

原文链接:How to create a basic blog in Django

Django 可以做的事情有很多,作为入门,我认为这是学习 Django 的一个好的开始。

Notes

首先你要自己部署 Django 的开发服务器,或者是 apache/lighttpd,如果还没有 Django 的环境请先部署好环境。 本次的这个博客程序只是作为一个例子,运行在真实环境中可能还是有一些未知的问题和不足的功能,有问题也请大家指出来,我好加以改进。

第一节:开始(Starting your application)

进入到你的项目目录中,这个目录中应该包含这几个文件 __init__.pymanage.pysettings.pyurls.py 。我的 project 名字是 djangorocks,如果你要用到其他名字,你需要在以后的代码中替换所有 djangorocks。

在终端(terminal)中输入以下命令,来创建新的 app 目录和几个基本文件,以便我们的博客使用。

python manage.py startapp blog

现在你应该有个文件夹下面包含这三个文件 __init__.py , models.pyviews.py

Important

打开 project 文件夹中的 settings.py ,找到 INSTALLED_APPS 并添加 “blog” ,代码如下:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'djangorocks.blog',
)

Django 现在已经知道你有一个新的 app,下面的事情就是详细地来创建它。

第二节:定义你的模型(Defining your models)

这个模型也就是你的数据库结构,让我们打开 app 目录中的 models.py,然后加入一些字段,因为这个非常简单,我将不会包含用户。

class Blog(models.Model):
    title = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=100, unique=True)
    body = models.TextField()
    posted = models.DateField(db_index=True, auto_now_add=True)
    category = models.ForeignKey('blog.Category')

class Category(models.Model):
    title = models.CharField(max_length=100, db_index=True)
    slug = models.SlugField(max_length=100, db_index=True)

现在我们来看看上面这段代码中每个部分分别代表什么意思

这将在数据库中创建一张名字为"Blog"的表,这是显而易见的,以后也会常用。

这些都是要建立在数据库中的基本字段

title = models.CharField(max_length=100, db_index=True)
slug = models.SlugField(max_length=100, db_index=True)
body = models.TextField()
posted = models.DateTimeField(db_index=True, auto_now_add=True)

最后一个字段要稍微高级点,此字段的数据是从另一个表而来,也就是我们一般说的外键,具体可参考 SQL FOREIGN KEY 约束

category = models.ForeignKey('blog.Category')

模型构建完成

这里还有一些东西需要添加到 Model 中,下面是你完成的模型文件内容。

from django.db import models
from django.db.models import permalink

# Create your models here.

class Blog(models.Model):
    title = models.CharField(max_length=100, unique=True)
    slug = models.SlugField(max_length=100, unique=True)
    body = models.TextField()
    posted = models.DateTimeField(db_index=True, auto_now_add=True)
    category = models.ForeignKey('blog.Category')

    def __unicode__(self):
        return '%s' % self.title

    @permalink
    def get_absolute_url(self):
        return ('view_blog_post', None, { 'slug': self.slug })

class Category(models.Model):
    title = models.CharField(max_length=100, db_index=True)
    slug = models.SlugField(max_length=100, db_index=True)

    def __unicode__(self):
        return '%s' % self.title

    @permalink
    def get_absolute_url(self):
        return ('view_blog_category', None, { 'slug': self.slug })

这些有什么用?

__unicode__ 函数为每条记录设置文本引用。主要用于自动化的 Django admin,但也可以用在我们自己的网站

get_absolute_url 函数定义了一个 URL,为每条记录用在管理区域

没有 " permalink " 装饰的话将不会工作。这是从 py 文件返回一个 URL,很快就会解释计算。我会推荐使用这种方法,因为它允许你改变一个页面的 URL 只在一个位置。

return ('view_blog_post', None, { 'slug': self.slug })

例子

标题:如何使用 Django 创建简单的博客

__unicode__ 响应:如何使用 Django 创建简单的博客

get_absolute_url 响应:/blog/view/how-to-create-a-basic-blog-in-django.html

这个例子的局限性

每篇文章有一个 slug 字段,用来作为 URL 识别,在这种情况下,博客的 title 和 slug 是唯一的,两个相同标题的文章是不合理的,为了解决这个问题你可以设置 slug 字段类似 2-my-second-post

这个例子允许文章只有一个类别,这是通过添加多对多的字段而不是 ForeignKey,这样你使用这个有一点点的不同,所以不会有其他太大的变化。

第三节:配置自动化后台(Configuring the automatic admin)

… 休息下,未完待续