最近对写爬虫有些厌倦了,因而将方向转移到了Web开发上。其实在以前本身也看过一部分Flask的资料,但总以为Flask的资料有些零散,并且须要的各类扩展也很是多。所以,我将研究方向转移到了另外一个主流的框架——Django上。python
与Flask框架相比,Django框架提供了更全面的文档支持,其初始教程也很容易上手。并且,相比Flask,Django并不须要不少扩展的支持,其自身就提供了不少便利的类。我的感受这两点使得学习Django比学习Flask更容易上手。nginx
目前,Python3已经成为了主流版本,所以此文采用Python3.5进行开发。sql
环境:Ubuntu16.04+Python3.5数据库
首先看一下目前的成果:django
首页列出了当前全部博客的列表,包括做者,阅读量以及发表时间;在页面左上角是用户名以及该用户的头像,而右边能够退出登陆以及发表博文。服务器
点击博文,能够浏览到博文内容,以及发表评论并查看评论。session
点击已注册的用户名,能够查看到该用户的相关资料。app
下面来介绍Django的几个基本概念:Project, App, Model, View框架
Project和App: 一个Django project便是一个网站,而App能够看为网站中的子功能。一个project里能够包含多个App,经过这些App的共同做用来实现网站的功能。oop
Model: 即数据库表模型。Django默认采用sqlite3做为数据库,每一个App都会创建本身的表,定义在App目录下的models.py文件里。
View: 视图类,定义在App目录下以及project目录下的views.py中,存储访问页面时的相关操做。
一般来讲,当咱们想要创建一个Django网站时,能够执行如下命令建立:
python3 django-admin.py startproject myblog有可能会出现找不到django-admin.py文件的错误,这时有两个选择:1. 把django-admin.py加入PATH环境变量;2. 在当前目录下创建django-admin.py的软链接:
ln -s python第三方库路径/django-admin.py ./django-admin.py可使用
python3 -m site命令查看python3的第三方库目录。
这时django会自动建立文件夹以及相关文件:
├── manage.py └── myblog ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
在这些文件中,manage.py是一个主要的控制文件,如创建数据库表,更新数据库表结构以及启动测试服务器都须要经过这个文件来进行;settings.py存储了网站总体的一些配置;urls.py用于在之后创建views和url的映射关系,而wsgi.py用于之后的nginx与uwsgi的部署。
对于这个我的博客网站来讲,咱们须要两个app: blogs和users。前者用于管理与博客有关的相关操做,然后者用于管理与用户有关的操做。
在mysite目录下,运行
python3 manage.py startapp users
users App的目录结构以下:
├── admin.py ├── apps.py ├── __init__.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.pymodels.py里决定了Users app的表结构,views.py里将会定义Users相关的视图类。
打开models.py,添加以下代码:
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目录下运行
python3 manage.py makemigrations users
python3 manage.py migrate这两条命令,在默认的sqlite数据库里创建Users表。
sqlite3 你的db文件名称打开你所创建的db,后输入.table命令查看当前数据库中的全部表,以下所示:
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的表就建好了,在以后的博文中会继续介绍网站的其余部份内容。
(未完待续)