Django博客网站开发例子

参考网址:https://www.cnblogs.com/Liqiongyu/p/5909706.html

具体步骤:

# 创建项目
django-admin startproject tutorial

# 创建App
django-admin startapp blog

#注册新的APP name到installed_apps:

把tutorial文件夹下的apps.py中的类名注册到:tutorial文件夹setting.py文件下的INSTALLED_APPS中。
这步做完后,下面要做的makemigrations才会在数据库中创建相应的数据,否则执行makemigrations不会有任何效果

# 同步一下数据库和模型之间的联系

如果不做同步操作的话,就很有可能报出:

django.db.utils.OperationalError: unable to open database file

django < 1.7 时: python manage.py syncdb

django > 1.7 时: python manage.py makemigrations

python manage.py migrate

#创建admin用户
$ python manage.py createsuperuser

#运行服务:
python manage.py runserver

#浏览器访问:
http://127.0.0.1:8000/admin

这时应能正常访问administration站点。

#修改setting.py中全局配置之语言区域:

LANGUAGE_CODE=’zh-hans’ 默认为:en-us

TIME_ZONE=’Asia/Shanghai’ 默认为:UTC

# 修改setting.py中全局配置之数据库访问及底层模型

# 修改models.py,定义网页内容

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

from DjangoUeditor.models import UEditorField

# 模型是Django提供一个抽象层(Models)以构建和操作你的web应用中的数据

# Create your models here.
class Article(models.Model):
 title = models.CharField(u"博客标题", max_length=100) # 博客标题
 category = models.CharField(u"博客标签", max_length=50, blank=True) # 博客标签
 pub_date = models.DateTimeField(u"发布日期", auto_now_add=True, editable=True) # 博客发布日期
 update_time = models.DateTimeField(u'更新时间', auto_now=True, null=True)
 content = models.TextField(blank=True, null=True) # 博客文章正文

 def __unicode__(self):
 return self.title

 class Meta: # 按时间下降排序
 ordering = ['-pub_date']
 verbose_name = "文章"
 verbose_name_plural = "文章"

# 这里定义的类名:Article 后面要分别在blog文件夹下的: views.py, admin.py文件中 添加语句: from .models import BlogPost 把类的信息同步过去。

如果在models.py中修改了数据库模型,后面要记得再执行一次: python manage.py makemigrations python manage.py migrate

让新增的APP能够被admin站点纳管,编辑blog/admin.py:

#coding:utf8
 
from django.contrib import admin
from blog.models import Article
# Register your models here.
 
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date')
 
admin.site.register(Article,ArticleAdmin)

在站点的admin.py中注册app类名: 修改APP的admin.py: from .models import model.py中定义的类名 admin.site.register(model.py中定义的类名)

这步做完后,才可以在admin站点的页面中看到并添加新的APP。

#这个时候已可以访问 http://127.0.0.1:8000/admin添加博客文章

# 下面将集成DjangoUeditor 编辑器:

直接用pip安装的Ueditor是python2版本的,如果需要Python3版本就需要从github下载源码包。解压后在命令行中进入源码包,输入python setup.py install

编辑setting.py ,在INSTALLED_APPS添加’DjangoUeditor’

在主urls.py中添加url(r’^ueditor/’,include(‘DjangoUeditor.urls’ ))

在models.py中添加引用,把原来model.py的content替换掉:

    #content = models.TextField(blank=True, null=True)  # 博客文章正文
    content = UEditorField(u"文章正文", height=300, width=1000, default=u'', blank=True, imagePath="uploads/blog/images/",
                       toolbars='besttome', filePath='uploads/blog/files/')

这个时候,在写博客的时候,就有一个方便的编辑插件可使用。

# 完善MVC模式

# Model层在blog/models.py中已经定义,主要用于定义页面元素与数据库字段对应关系。

#Control层用于定义每个URL请求应该访问后台那个接口,由哪个函数定义响应行为

# 我们定义tutorial/urls.py如下:

from django.conf.urls import url
from django.contrib import admin

# add by author
from django.conf.urls import include
from DjangoUeditor import urls as djud_urls
from django.conf import settings

import blog.urls as blog_url
from blog.views import home

urlpatterns = [
    url(r'^$',home,name="index"),
    url(r'^blog/',include(blog_url)),
    url(r'^admin/', admin.site.urls),
    url(r'^ueditor/', include('DjangoUeditor.urls')),
]

if settings.DEBUG:
    from django.conf.urls.static import static
    urlpatterns += static(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT)

#定义blog/urls.py内容如下:

#coding:utf8
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^post/(?P<id>\d+)/$',views.Detail,name="blog_detail"),
    url(r'^home/',views.home,name="blog_home"),
    url(r'^test/',views.Test,name="blog_test"),
]

# V(views.py)视图层
# 决定一个特定函数用于响应用户特定url过来的请求

#编辑 blog/views.py:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse
from blog.models import Article
from datetime import datetime
from django.http import Http404
# Create your views here.

def home(request):
    post_list = Article.objects.all()  # 获取全部的Article对象
    return render(request, 'blog/home.html', {'post_list': post_list})

def Test(request):
    return render(request,'blog/test.html',{'current_time': datetime.now()})

def Detail(request,id):
    try:
        post = Article.objects.get(id=str(id))
    except Article.DoesNotExist:
        raise Http404
    return render(request,'blog/post.html',{'post':post})

#定义templates, 指定网页元素如何展示:

3.附录

参考网页:

https://www.cnblogs.com/Liqiongyu/p/5909706.html

安装DjangoUeditor的方法:

https://github.com/twz915/DjangoUeditor3/

makemigrations提示no changes的处理办法:

删除db.sqlite3中的表,删除blog/migrations下的内容。

http://blog.csdn.net/listron/article/details/67635093

把表都删除了,执行:

python manage.py makemigrations 还是提示no changes.

执行如下语句就OK:

python manage.py makemigrations blog

利用Anaconda进行python多版本管理

背景:

之前用的python 2.7安装django,后面搭建tensorflow环境用的是anaconda 安装了python 3.6。今天新建django项目,要执行时发现无法导入django。当前执行python时默认执行anaconda python 3.6。

查看环境信息:

$ conda info --envs
# conda environments:
#
tensorflow   /Users/zcy/anaconda3/envs/tensorflow
root            * /Users/zcy/anaconda3

结果显示当前conda环境中存在两个python环境,活动的是root。

通过: source activate tensorflow 激活另外一个环境。

当时在tensorflow这套环境中,使用的python环境是3.6的。现在其实可以新建一个环境,并安装python 2.7的环境。

命令如下:

sudo conda create -n python27 pip python=2.7

source activate python27

sudo pip install django

验证:

$ python

Python 2.7.14 |Anaconda, Inc.| (default, Dec  7 2017, 11:07:58) 

[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import django

>>>

现在再查看环境信息:

$ conda info --envs

# conda environments:

#

python27                 /Users/zcy/anaconda3/envs/python27

tensorflow               /Users/zcy/anaconda3/envs/tensorflow

root                  *  /Users/zcy/anaconda3

附:关于如何激活与取消激活:

#

# To activate this environment, use:

# > source activate python27

#

# To deactivate an active environment, use:

# > source deactivate

#

关于:pip 安装matplotlib后,import报错的解决方法:

import matplotlib.pyplot as plt

报错:RuntimeError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.
解决方法:
Create a file ~/.matplotlib/matplotlibrc there and add the following code: backend: TkAgg
参考网址:https://stackoverflow.com/questions/21784641/installation-issue-with-matplotlib-python

 

 

新的环境切换命令:
conda activate python37
conda deactivate

关于 Anaconda 从外网下载速度慢的解决办法:
使用国内的镜像站
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

网站好文网址收藏

Python:

官方文档:https://docs.python.org/3.6/library/index.html
Github热门项目:https://github.com/trending?since=weekly

Django:

官方文档:https://docs.djangoproject.com/en/2.0/
Py社区:http://www.python88.com/  (有很多有深度的讨论)

测试:

测试话题比较专业的社区:https://testerhome.com/

深度学习:

Keras官方文档
Tensorflow官方文档

视频课程:

Google机器学习速成课程中文版
Learn with Google AI

双囍是朵花儿:

双囍微博
http://nbshuangxi.lofter.com/

跨境电商:

http://www.amz123.com/
http://www.guxiaobei.com/

顾小北深度好文:

如何通过互联网赚钱

安全网站:

http://www.freebuf.com/

这份程序员的简历刷爆了五月的朋友圈

1998年开始从事IT行业的程序员对于个人及行业发展的反思,值得借鉴

乔布斯 2005年 斯坦福大学 演讲

“那些看似在生命中没有关联、微不足道的事情就像一个个散落在各地的珍珠,当我的人生向前展望时我不会把它们都串联起来。但是等到我回顾人生时,我必须相信这些片断会在未来的某一天串连起来,突然有一天让我豁然开朗”
乔布斯2005年斯坦福毕业典礼演讲全文
知乎:毕业5年,从月薪1900到月薪50000

HTML&CSS设计与构建网站代码

示例代码查看

页面设计及美化组件

hexo:fast, simple and powerful blog framework
iView:一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产品

朱双印 个人运维博客