最近对写爬虫有些厌倦了,于是将方向转移到了Web开发上。其实在之前自己也看过一部分Flask的资料,但总觉得Flask的资料有些零散,而且需要的各种扩展也非常多。因此,我将研究方向转移到了另一个主流的框架——Django上。

与Flask框架相比,Django框架提供了更全面的文档支持,其初始教程也很容易上手。而且,相比Flask,Django并不需要很多扩展的支持,其自身就提供了很多便利的类。个人感觉这两点使得学习Django比学习Flask更容易上手。

目前,Python3已经成为了主流版本,因此此文采用Python3.5进行开发。

环境:Ubuntu16.04+Python3.5

首先看一下目前的成果:

首页列出了当前所有博客的列表,包括作者,阅读量以及发表时间;在页面左上角是用户名以及该用户的头像,而右边可以退出登录以及发表博文。

点击博文,可以浏览到博文内容,以及发表评论并查看评论。

点击已注册的用户名,可以查看到该用户的相关资料。

下面来介绍Django的几个基本概念:Project, App, Model, View

Project和App: 一个Django project即是一个网站,而App可以看为网站中的子功能。一个project里可以包含多个App,通过这些App的共同作用来实现网站的功能。

Model: 即数据库表模型。Django默认采用sqlite3作为数据库,每个App都会建立自己的表,定义在App目录下的models.py文件里。

View: 视图类,定义在App目录下以及project目录下的views.py中,存储访问页面时的相关操作。

通常来说,当我们想要建立一个Django网站时,可以执行以下命令创建:

  1. python3 django-admin.py startproject myblog
python3 django-admin.py startproject myblog

有可能会出现找不到django-admin.py文件的错误,这时有两个选择:1. 把django-admin.py加入PATH环境变量;2. 在当前目录下建立django-admin.py的软连接:

  1. ln -s python第三方库路径/django-admin.py ./django-admin.py
ln -s python第三方库路径/django-admin.py ./django-admin.py

可以使用

  1. python3 -m site
python3 -m site

命令查看python3的第三方库目录。

这时django会自动创建文件夹以及相关文件:

  1. ├── manage.py
  2. └── myblog
  3. ├── __init__.py
  4. ├── settings.py
  5. ├── urls.py
  6. └── wsgi.py
├── manage.py
└── myblog
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

(由于现在的myblog目录已经有了很多文件了,因此我新建了一个工程来展示目录结构)

在这些文件中,manage.py是一个主要的控制文件,如建立数据库表,更新数据库表结构以及启动测试服务器都需要通过这个文件来进行;settings.py存储了网站整体的一些配置;urls.py用于在以后建立views和url的映射关系,而wsgi.py用于以后的nginx与uwsgi的部署。

对于这个个人博客网站来说,我们需要两个app: blogs和users。前者用于管理与博客有关的相关操作,而后者用于管理与用户有关的操作。

在mysite目录下,运行

  1. python3 manage.py startapp users
python3 manage.py startapp users

来建立第一个App——users,我们通过这个App来实现管理用户的相关操作。

users App的目录结构如下:

  1. ├── admin.py
  2. ├── apps.py
  3. ├── __init__.py
  4. ├── migrations
  5. │   └── __init__.py
  6. ├── models.py
  7. ├── tests.py
  8. └── views.py
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
└── views.py

models.py里决定了Users app的表结构,views.py里将会定义Users相关的视图类。

打开models.py,添加如下代码:

  1. from django.db import models
  2. import datetime
  3. import PIL
  4. # Create your models here.
  5. class Users(models.Model):
  6. username = models.CharField(max_length=8,primary_key=True,unique=True)
  7. password = models.CharField(max_length=16)
  8. logoimage = models.ImageField(upload_to='logoimages',null=True)
  9. # new field
  10. birthday = models.DateTimeField(null=True,blank=True)
  11. email = models.CharField(max_length=255,null=True,blank=True)
  12. mobilephone = models.CharField(max_length=11,null=True,blank=True)
  13. # new field end
  14. registertime = models.DateTimeField()
  15. @classmethod
  16. def create(cls,username,password,birthday,email,mobilephone):
  17. user = cls(username=username,password=password,birthday=birthday,
  18. email=email,mobilephone=mobilephone,registertime=datetime.datetime.now())
  19. return user
  20. def __unicode__(self):
  21. return self.username
from django.db import models
import datetime
import PIL
# Create your models here.
class Users(models.Model):
username = models.CharField(max_length=8,primary_key=True,unique=True)
password = models.CharField(max_length=16)
logoimage = models.ImageField(upload_to='logoimages',null=True)
# new field
birthday = models.DateTimeField(null=True,blank=True)
email = models.CharField(max_length=255,null=True,blank=True)
mobilephone = models.CharField(max_length=11,null=True,blank=True)
# new field end
registertime = models.DateTimeField() @classmethod
def create(cls,username,password,birthday,email,mobilephone):
user = cls(username=username,password=password,birthday=birthday,
email=email,mobilephone=mobilephone,registertime=datetime.datetime.now())
return user def __unicode__(self):
return self.username

在这个model里,我们建立了名为Users的表,包含username, password, logoimage, birthday, email, mobilephone和registertime这几个字段,并且以username为主键。

我们还创建了create类方法,用于在以后的注册用户功能中调用。

定义的__unicode__方法使得用户可以在django提供的admin页面中查看已有的用户。

在编写好users的model后,我们打开myblog目录下的setting.py,在其中INSTALLED_APPS加入'users.apps.UsersConfig'一项,把该App注册到网站中。

随后在myblog目录下运行

  1. python3 manage.py makemigrations users
python3 manage.py makemigrations users
  1. python3 manage.py migrate
python3 manage.py migrate

这两条命令,在默认的sqlite数据库里建立Users表。
可以通过命令

  1. sqlite3 你的db文件名称
sqlite3 你的db文件名称

打开你所建立的db,后输入.table命令查看当前数据库中的所有表,如下所示:

  1. sqlite3 blog.sqlite
  2. SQLite version 3.11.0 2016-02-15 17:29:24
  3. Enter ".help" for usage hints.
  4. sqlite> .table
  5. auth_group                  blogs_category
  6. auth_group_permissions      blogs_comment
  7. auth_permission             django_admin_log
  8. auth_user                   django_content_type
  9. auth_user_groups            django_migrations
  10. auth_user_user_permissions  django_session
  11. blogs_blog                  users_users
sqlite3 blog.sqlite
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> .table
auth_group blogs_category
auth_group_permissions blogs_comment
auth_permission django_admin_log
auth_user django_content_type
auth_user_groups django_migrations
auth_user_user_permissions django_session
blogs_blog users_users

其中,以django_和auth_开头的为django自己的系统表,而用户定义的表以App名称_类名称作为表名,如users_users,blogs_blog,blogs_category等。

这样,我们的第一个App的表就建好了,在之后的博文中会继续介绍网站的其他部分内容。

(未完待续)

Django+Nginx+uwsgi搭建自己的博客(一)的更多相关文章

  1. Django+Nginx+uwsgi搭建自己的博客(五)

    在上一篇博文中,向大家介绍了Users App和Index的前端部分的实现,以及前端与Django的通信部分.至此,我们的博客已经具备一个简单的雏形,可以将其部署在本地的服务器上了.目前较为流行的we ...

  2. Django+Nginx+uwsgi搭建自己的博客(四)

    由于在上篇博文中仍然介绍了相当多的后端部分,导致原定于上篇介绍的前端部分“跳票”到了这篇.在此篇博文中,我将会介绍Users App和主页的前端部分,从而形成我们博客的一个雏形. 在前端部分,我们主要 ...

  3. Django+Nginx+uwsgi搭建自己的博客(八)

    在这篇博客中,我们开始为我们的博客开发Blogs App和Users App相关的管理功能,以便每个用户都能管理自己的博客以及评论.目前,Users App的管理功能相对简单,主要功能为查看用户资料以 ...

  4. Django+Nginx+uwsgi搭建自己的博客(七)

    上一篇博客中介绍了Blogs App的部分后端功能的实现,在这篇博客中,将继续为大家介绍Blogs App中前端功能的实现. 首先来看发布博客功能的前端页面.在blogs/templates/blog ...

  5. Django+Nginx+uwsgi搭建自己的博客(六)

    这篇应该是2017年的最后一篇博客了,在这里首先祝大家元旦快乐! 从这篇博客开始,将会介绍Blogs App的功能实现,包括数据模型的建立.相关功能的视图函数的实现.前端页面的设计等,这意味着我们即将 ...

  6. Django+Nginx+uwsgi搭建自己的博客(二)

    在上一篇博客中,为大家介绍了Django的一些基本概念以及建立了第一个App——Users,并且在数据库中建立了对应的表. 在这篇博客中,将为大家继续介绍数据库模型的定义和相关操作,以及Users A ...

  7. Django+Nginx+uwsgi搭建自己的博客(三)

    (本来打算在这篇博文中介绍Users App的前端部分的,但写着写着就发现还需要铺垫很多东西才能把整个项目串的比较流畅些,因此这篇就继续介绍了后端的一些东西,前端的部分只好跳票到下一篇了-) 在上一篇 ...

  8. python3.x +django + nginx + uwsgi 搭建web服务

    最近一直在用django开发自己的网站.在开发和线上环境的对接过程中遇到了许多的坑.所以想以一个老鸟的经历来写一下怎么 搭建web服务 一.python3.x .django .nginx .uwsg ...

  9. Linux - 搭建Web项目(Django + nginx + uwsgi)

    工作中碰到需要使用Django + nginx + uwsgi 搭建项目环境 1. 搭建基本环境 需要有python环境,不多做说明 需要安装nginx,不多做说明 需要安装uwsgi: yum in ...

随机推荐

  1. Spring整合JMS(二)——三种消息监听器(转)

    *注:别人那复制来的 1.3     消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageList ...

  2. POJ 2431 优先队列

    汽车每过一单位消耗一单位油,其中有给定加油站可加油,问到达终点加油的最小次数. 做法很多的题,其中优先对列解这题是很经典的想法,枚举每个加油站,判断下当前油量是否小于0,小于0就在前面挑最大几个直至油 ...

  3. ItemCF_基于物品的协同过滤

    ItemCF_基于物品的协同过滤 1.    概念 2.    原理 如何给用户推荐? 给用户推荐他没有买过的物品--103 3.    java代码实现思路 数据集: 第一步:构建物品的同现矩阵 第 ...

  4. 编程笔记:JavaScript 中的类型检查

    在Badoo的时候我们写了大量的JS脚本,光是在我们的移动web客户端上面就有大概60000行,可想而知,维护这么多JS可是相当具有挑战性的.在写如上规模js脚本客户端应用的时候我们必须对一件事保持警 ...

  5. 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法

    [题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...

  6. typeof运算符

    javascript中typeof用来判断一个变量或表达式的数据类型. typeof 返回值有六种可能: "number," "string," "b ...

  7. H5调试工具 - weinre远程调试工具

    weinre 简介 weinre 是一款类似于firebug 和Web Inspector的网页调试工具, 它的不同之处在于可以用于进行远程调试,比如调试手机上面的网页. 安装 weinre(运行在n ...

  8. 安装完ODTwithODAC112012,出现ORA-12560:TNS:协议适配器错误

    参考:http://blog.csdn.net/tan_yixiu/article/details/6762357 操作系统:windows2008 Enterprise 64位 开发工具:VS201 ...

  9. ansible command模块将返回值写入变量

    ansible 中command模块支持 register参数将远程命令执行的输出结果存储在变量中,后续可以在when中对该变量进行检索确定下一步任务. --- - name: cat /etc/re ...

  10. IDEA配置toString方法

    1.toString JSON带父类toString public java.lang.String toString() { final java.lang.StringBuilder sb = n ...