最近要做一个网站,语言为python,框架使用Django。

之前由于没接触过python,所以又找了些python的书来看。感觉python的确是门不错的编程语言。

当然,重点还是Django。学习时,我主要参考了官方文档,和一个很简单的BLOG实现。

其实使用Django只需要基础的python知识。所以,大家都去试试吧。

以下为网址:

Django官网: https://www.djangoproject.com/

BLOG实现教程:http://brenelz.com/blog/a-detailed-django-tutorial-blog-basics-part-i/

开始工作

首先是准备工作,你需要在电脑中安装Django,以及一个数据库(这里为了简单,就不介绍了)。

之后,通过输入“django-admin.py startproject myblog”来创建一个包含django项目的myblog目录。进入myblog目录后你们会看到以下4个文件:

__init__.py

manage.py

urls.py

setting.py

简单介绍一下这些文件内容:

__init__.py :是用来告诉python这个文件夹的内容是一个可以被其他python package import 或者include 的 package。 这就使得我们的应用程序能被django框架执行。这也是这个文件存在的意义。

manage.py:提供了通过设置settings.py,django-admin.py所能给出的命令。这就使得你能够执行:python manage.py runserver来在服务器上运行你的项目,而不用将你的项目模块添加到python 模块中再设置settings.py文件。

urls.py:描述了服务端urls与函数调用的映射,并最终返回一个http response。URLs都是通过正则表达式来做映射的。

settings.py:包含了项目相关的设置。在其中有为独立应用设置的参数,也有全局参数(例如数据库database和时区timezone信息)

了解了这些后,我们开始进行对settings.py的设置:

首先是数据库,我使用的是mysql,所以如下:

[python] view plaincopyprint?
  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
  4. 'NAME': 'myblog_db',                      # Or path to database file if using sqlite3.
  5. 'USER': 'djangouser',                      # Not used with sqlite3.
  6. 'PASSWORD': '123456',                  # Not used with sqlite3.
  7. 'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
  8. 'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
  9. }
  10. }

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'myblog_db', # Or path to database file if using sqlite3. 'USER': 'djangouser', # Not used with sqlite3. 'PASSWORD': '123456', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. } }

如果你使用的是别的数据库,那么请自行设定。

有一点值得注意,在settings.py中的文件路径必须是绝对路径。因为相对路径是不清楚的(one of python's philosophies)。但是我们可以通过在settings.py中添加以下代码段来让我们在settings.py中可以使用相对路径。

[python] view plaincopyprint?
  1. import os
  2. rel = lambda *x: os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)

import os rel = lambda *x: os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)

代码中第一行import了python提供的os模块,其中包含了路径相关操作。

第二行中我们创建了一个称做rel的lambda/anonymous函数。在python中,lambda函数通常是带返回值的短短一行的函数,而它的返回值是隐式传递的。作为lambda函数定义的一部分,任意多的参数都将被储存于x数组中。

让我们来用一下上面定义的函数来设置TEMPLATE_DIRS:

[python] view plaincopyprint?
  1. TEMPLATE_DIRS = (
  2. rel(‘templates’),
  3. )

TEMPLATE_DIRS = ( rel(‘templates’), )
这样我们就将TEMPLATE_DIRS与当前项目目录中的templates子目录关联起来了。再次强调,若没有定义rel函数,在settings.py中对文件路径的设置需使用绝对路径。

保存,我们的开始工作就做好了。

创建第一个应用

若一个BLOG没有帖子(posts),还称得上BLOG么?所以我们第一个要做的是一个blog posts的应用。你需要做的是在项目目录中执行:

django-admin.py startapp posts or python manage.py startapp posts

这样就创建了一个叫做posts的子目录以及应用。

进入posts目录你会看到以下文件:

__init__py:作用与项目中的__init__.py一样

models.py:包含了与存储在数据库中数据相关的类,是数据库中数据到python的一个映射。

view.py:包含了项目中urls.py中所映射到的函数。这些函数还是数据库数据与模板的“粘合剂”。

test.py:为应用提供一个用来测试的文件

在开始实现功能之前,我们首先需要为应用添加一些model。我们的帖子模型将会是最精简的。那么,打开models.py文件,添加下列代码:

[python] view plaincopyprint?
  1. from django.contrib.auth.models import User
  2. class Post(models.Model):
  3. author = models.ForeignKey(User, related_name=’posts’)
  4. title = models.CharField(max_length=200)
  5. body = models.TextField()
  6. pub_date = models.DateTimeField(auto_now_add=True)
  7. up_date = models.DateTimeField(auto_now=True)
  8. def __unicode__(self):
  9. return self.title

from django.contrib.auth.models import User class Post(models.Model): author = models.ForeignKey(User, related_name=’posts’) title = models.CharField(max_length=200) body = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) up_date = models.DateTimeField(auto_now=True) def __unicode__(self): return self.title
补充:‘self’是什么?

Python是一门清晰的语言。所以在类的方法中的开头需要额外添加一个参数作为该类的一个实例。而这个实例通常称做self。这就像$this变量在php或者this在java中的效果一样。

以上的代码展示了我们的从django的Model类中继承的模型中的数据。第一行import了django提供的Usermodel,这样就为我们的项目添加了“用户”支持,其中包括认证与权限。但在这个例子中,我们只需要将用户与帖子的发表者联系起来就行了。称做related_name的关键参数是一个可变的名称,是User模型储存帖子列表。默认为<model_name>_set,但这里我们定义为posts。

每个帖子都会有一个标题(title)字段,在数据库中是一个最大长度为200字符的字段。通过数据库(假设你是用Django来创建表)和Django保存使这个字段生效。内容(body)字段是自解释的,它创建了一个用来保存大量文本字符串的字段。发帖时间(Pub_date)和更新时间(up_date)在数据库中以时间(datetime)字段形式储存。关键字参数auto_now_add设置这些字段在模型被加入到数据库时自动存入当前时期与时间。同样的,一旦模型被保存auto_now就自动提供当前的时间。

最后,我们定义了一个__unicode__方法。这个方法在一个帖子实例被请求自动展示使会被调用返回一个unicode字符串。

这样我们的模型就定义好了~

接下来需要在项目中加上我们自己定义的应用。在settings.py中的INSTALLED_APPS添加posts,结果如下:

[python] view plaincopyprint?
  1. INSTALLED_APPS = (
  2. ’django.contrib.auth’,
  3. ’django.contrib.contenttypes’,
  4. ’django.contrib.sites’,
  5. ’posts’,
  6. )

INSTALLED_APPS = ( ’django.contrib.auth’, ’django.contrib.contenttypes’, ’django.contrib.sites’, ’posts’, )
在应用被装载时,它们是按照上面列出的顺序装载的。所以你自己定义的应用应该放在最后,因为它们依赖于Django内置的应用。

我们能通过python manage.py syncdb命令来告诉Django在数据库中创建INSTALLED_APPS已有模型的表。

这里需要注意一个django syncdb的缺陷:

manage.py syncdb不会做模式迁移。这意味着syncdb只会创建数据库中不存在的表,若该表已存在,django syncdb不会做任何事。这样,在你想对model&table做出一些修改时就会出现问题了。最简单的方法是运行python manage.py reset <appname>来删除并重新创建特定应用的表,但这样你就失去了之前所存的数据。或者,目前有许多django开发者实现的第三方模式迁移的实现,这些值得注意。但到目前,官方没有相关方法。

当创建django.contrib.auth表时,程序会要求你创建一个超级用户,按照程序一直执行下去。之后,会介绍创建管理员界面,并用超级用户登录。

PS:先到这,感觉有些地方值得注意:

1.related_name

2.django syncdb的缺陷

django 博客一相关推荐

  1. django orm级联_第 03 篇:创建 Django 博客的数据库模型

    HelloGitHub-Team 成员--追梦人物 设计博客的数据库表结构 博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库.我们把 ...

  2. django博客项目8:文章详情页

    首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容.现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样 ...

  3. Django 博客教程(三):创建应用和编写数据库模型

    创建 django 博客应用 在上一章节中我们创建了 django 博客的工程,并且成功地运行了它.然而这一切都是 django 为我们创建的项目初始内容,django 不可能为我们初始化生成我们需要 ...

  4. Django 博客开发教程 6 - 真正的 Django 博客首页视图

    在此之前我们已经编写了 Blog 的首页视图,并且配置了 URL 和模板,让 Django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应.不过我们仅仅在首页返回了一句话:欢迎访问我的博客 ...

  5. Django 博客开发教程 8 - 博客文章详情页

    首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容.现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样 ...

  6. Django博客来访人员地域分布大数据可视化---echarts绘图、geoip2获取地理位置

    文章目录 Django博客来访人员地域分布大数据可视化---echarts绘图.geoip2获取地理位置 效果 echarts作图 geoip2获取地理位置 api接口开发 ajax前后端动态交互 D ...

  7. Django博客系统(详情评论数据展示)

    1. 查询评论数据并展示 1.查询评论数据并通过context传递给HTML from home.models import Comment from django.shortcuts import ...

  8. Django博客系统(详情页面展示)

    1. 页面展示 1.在home.views.py文件中定义视图 from django.views import Viewclass DetailView(View):def get(self,req ...

  9. Django博客系统(首页文章数据展示)

    1. 查询分页数据并展示 1.查询分类文章数据并通过context传递给HTML from home.models import ArticleCategory,Article from django ...

  10. Django博客系统(首页分类数据展示)

    1. 首页接口设计 1.请求方式 选项 方案 请求方法 GET 请求地址 /?cat_id=xxx&page_num=xxx&page_size=xxx 2.请求参数 参数名 类型 是 ...

最新文章

  1. 联合登陆【支付宝、网易、QQ】
  2. 炫彩界面库使用方法问题记录
  3. 在当当买了python怎么下载源代码-爬虫实战一:爬取当当网所有 Python 书籍
  4. 深入mysql慢查询设置的详解
  5. luogu P1774 最接近神的人_NOI导刊2010提高(02)
  6. uibinder表单提交_使用UIBinder的GWT自定义按钮
  7. Ubuntu 16.04下使用Wine安装Xshell 4和Xftp 4
  8. python文本去重函数_python3.4.3下逐行读入txt文本并去重的方法
  9. Java多线程学习三:有哪几种实现生产者消费者模式的方法
  10. 使用码云或GitHub搭建简单的个人网站
  11. paip.java 多线程参数以及返回值Future FutureTask 的使用.
  12. 动态规划(dp)的总结
  13. 安卓studio加载HTML文件,Android Studio 加载本地Assets中的html文件
  14. 一句话总结行测资料分析八大速算技巧
  15. NYOJ 412 Same binary weight题解
  16. topgate镜像_AMOLED电流镜像像素电路的稳定性分析
  17. ACP知识域三---干系人管理
  18. IMU传感器输出值与实际物理量的换算关系
  19. 关于Ubuntu 无法正常关机的问题
  20. 自建云存储:Nextcloud vs. ownCloud vs. Seafile

热门文章

  1. DeveloperAppleHelp
  2. 转载:NPOI导出到Excel表格
  3. 学好WindowsServer技术的几大秘籍
  4. 增强环路现象!? 为你揭示云计算魔力!
  5. 今天发现的好几个PP文字,不敢独享,gaga
  6. 问题四十五:怎么画ray tracing图形中的blending and joining surface
  7. 数据结构与算法笔记总结
  8. 大数据分析需要掌握哪些技术
  9. 矩阵论复习笔记:矩阵直积及其应用
  10. 好用的import: Vite的Glob 导入