Django 博客初体验

Django 是一个高性能的 Web 框架,具有快速、安全、可升级的特性,Django 采用了 MVC 的软件设计模式,即模型 M,视图 V 和控制器 C。社区资源丰富,可以迅速的将项目搭建起来。

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source. Django官网

创建虚拟环境

虚拟环境可以给不同的项目提供不同的配置环境,便于管理项目所需的库。
命令行下:
1.pip install virtualenv (安装 virtualenv )
2.virtualenv your_virtualenv_name (创建虚拟环境)
3.找到虚拟环境的目录Scripts再打开命令行:activate (激活虚拟环境)
4.安装所需要的第三方库,比如pip install Django等
5.pip list (查看已安装的第三方库)
6.pip freeze > requirements.txt 在项目中生成第三方库一览文件

Pycharm 中配置环境

Windows 下用 Pycharm 开发,打开 Pycharm ,New Django project ,应该注意的是 Interpreter 选的就是我们之前创建的 Virtualenv ,在之前创建的虚拟环境目录下找到 python.exe 路径即可完成配置。

新建app

models.py 文件用来创建数据模型,比如我们要创建文章模型,要有标题、内容、作者、标签等几个字段,像下面这样:

class Authors(models.Model):
    name = models.CharField(max_length=30, verbose_name=u'作者')
    note = models.CharField(max_length=200, verbose_name=u'简介', default='')
    contact = models.CharField(max_length=30, verbose_name=u'联系方式', default='')
    add_time = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间')
    
class Article(models.Model):
    title = models.CharField(max_length=100,verbose_name=u'标题')
    content = UEditorField(verbose_name='内容详情',width=750, height=300,imagePath="images/ueditor/",filePath="images/ueditor/",default='')
    label = models.CharField(choices=(('py', u'Python'), ('ad', u'Android') , ('java', u'Java'), ('javascript', u'JavaScript'), ('h5', u'Html/Css'), ('share', u'随笔')), max_length=20, verbose_name=u'标签')
    fav_nums = models.IntegerField(verbose_name=u'点赞数', default=0)
    click_nums = models.IntegerField(default=0, verbose_name=u'点击数')
    author = models.ForeignKey(Authors, verbose_name=u'作者')
    add_time = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间')

编辑完 models.py 文件后,需要往数据库提交编辑,run manage.py task,命令行里:

1.makemigrations appname
2.migrate appname

数据模型就可以创建成功,以后对数据模型进行任何更改都要执行这两个命令。

views.py 文件和前端页面展示

假设我们前端 html 页面已经做好,views.py 文件主要用来返回数据给前端页面进行数据展示,下面是编写好的 views.py 文件片段:

class IndexView(View):
    def get(self, request):
        all_articles = Article.objects.all()
        ordered_articles = all_articles.order_by('-add_time')  # 按最新时间排序
        # 分页
        try:
            page = request.GET.get('page', 1)
        except PageNotAnInteger:
            page = 1
        p = Paginator(ordered_articles, 6, request=request)
        articles = p.page(page)
        index = 'index'
        return render(request, 'index.html', {
            'all_articles': articles,
            'index': index,
        }) # 这里参数返回,第一是request,第二是数据返回给哪一个html页面,第三是数据

这段代码是对数据库进行查询并且返回给 html 。

urls.py 中间人

models.py 的数据写好了,views.py 的类方法也写好了,此时需要一个给两者牵线搭桥的帮手,它就是项目名称目录下urls.py 文件,在 urls.py 文件中:

# -*- coding:utf-8 -*-    # 使文件支持中文编辑
from Django.conf.urls import url, include
# from Django.contrib import admin
from app_article.views import IndexView
from Django.views.static import serve
import xadmin
from myblog3.settings import MEDIA_ROOT

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls), 
    url(r'^$', IndexView.as_view(), name='index'), 
    url(r'^all_articles/', include('app_article.urls', namespace='articles')),   # url 分级
    url(r'^ueditor/',include('DjangoUeditor.urls' )), # 富文本相关URL
    url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
]

一个 url 对应一个 views.py 的类方法,备注几点:

1.as_view ()方法类似于将 views.py 文件中的类转换为方法
2.在上面代码中,用了官方提供的 url 二级分发 (暂且叫它二级分发),在新建的 app 目录下还有一个 urls.py 文件,里面的内容类似第三点
3.name='index' 给这个 url 起一个便于使用的名字 (一般在编辑html时,方便编写)

后台管理系统

Django 自带后台管理系统,可以对数据进行增删查改,在 Django 中已经自动为我们配置好了,我们要做的是创建一个后台管理账号和将数据模型注册到后台。

1.run manage.py task 创建后台管理账号:

python manage.py createsuperuser

2.在 admin.py 文件中进行数据模型注册:

from Django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Authors)
admin.site.register(Article)

注册完毕后,运行项目,在浏览器地址栏输入 http://127.0.0.1:8000/admin ,去看看后台管理界面吧。

补充说明

1.在编写前端页面时,用到 css、js、图片的时候需要在 html 第一行加入{% raw %}{% load staticfiles %}{% endraw %} ,然后图片引用方式像这样:

<img src="{% static 'images/qq-icon.jpg' %}">

css,js 文件类似。

2.Django 支持很多类型的数据库,就 Mysql 来说,在 settings.py 文件中应该像这样设置:

DATABASES = {
    'default': {
        'ENGINE': 'Django.db.backends.mysql',
        'NAME': 'database_name',
        'USER':'root',
        'PASSWORD': 'password',
        'HOST': '',
        'PORT': '',
    }
}

参考资料:

Django 官网文档:https://www.Djangoproject.com/

Django 模板语言:http://python.usyiyi.cn/Django/ref/templates/language.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容