Django+Nginx+uwsgi搭建本身的博客(一)

最近對寫爬蟲有些厭倦了,因而將方向轉移到了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網站時,能夠執行如下命令建立:

 

  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,添加以下代碼:

 

[python] view plain copy
print ?
  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.  
  16.     @classmethod  
  17.     def create(cls,username,password,birthday,email,mobilephone):  
  18.         user = cls(username=username,password=password,birthday=birthday,  
  19.                    email=email,mobilephone=mobilephone,registertime=datetime.datetime.now())  
  20.         return user  
  21.   
  22.     def __unicode__(self):  
  23.         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的表就建好了,在以後的博文中會繼續介紹網站的其餘部份內容。

(未完待續)

相關文章
相關標籤/搜索