最近對寫爬蟲有些厭倦了,因而將方向轉移到了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的表就建好了,在以後的博文中會繼續介紹網站的其餘部份內容。
(未完待續)