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