最近对写爬虫有些厌倦了,于是将方向转移到了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. java中BigDecimal在金融行业中的使用

    1.引言 在java语言中,double和float用于二进制浮点型计算,无法得到精确的结果.而BigDecimal则用于精确的计算.不超过16位有效数字(最好是不超过13位)的科学和工程计算,可以使 ...

  2. HDU 2827 高斯消元

    模板的高斯消元.... /** @Date : 2017-09-26 18:05:03 * @FileName: HDU 2827 高斯消元.cpp * @Platform: Windows * @A ...

  3. jQuery插件ASP.NET应用之AjaxUpload

    本次使用AJAXUPLOAD做为上传客户端无刷上传插件,其最新版本为3.9,官方地址:http://valums.com/ajax-upload/ 在页面中引入 jquery.min.1.4.2.js ...

  4. 【BZOJ】2049: [Sdoi2008]Cave 洞穴勘测 LCT

    [题意]给定n个点和m个操作,每次操作:1.连接2个点.2.断开2个点.3.查询2个点是否连通.m<=2*10^5. [算法]Link-Cut Tree [题解]LCT模板题,Link,Cut, ...

  5. CALayer---iOS-Apple苹果官方文档翻译之CALayer

    CHENYILONG Blog CALayer---iOS-Apple苹果官方文档翻译之CALayer CALayer /*技术博客http://www.cnblogs.com/ChenYilong/ ...

  6. 【leetcode 简单】第三十四题 只出现一次的数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...

  7. 【译】第一篇 SQL Server代理概述

    本篇文章是SQL Server代理系列的第一篇,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Serve ...

  8. Struts结果跳转方式(四种result配置)

    1.转发(默认转发)

  9. java中8种数据类型和默认值所占字节数

    java 8种基本数据类型的默认值及所占字节数 通过一段代码来测试一下 8种基本数据类型的默认值 1 package dierge; 2 3 public class Ceshi { 4 int a; ...

  10. 《secret》读书笔记

    这是在从大连到深圳飞机上看完的一本书,也是大学毕业时室友整理书籍给我的.正好回来的途中,一气呵成读完了. 全书讲了几个事情,其中费了很大篇幅就围绕一个主题,当然书题了——秘密,这个秘密就是“吸引力法则 ...