前言
最近有個朋友說他每天工作時都要查看某些官方網站的通告,一看就是十幾個網站,每個網站來回切,很是煩躁,于是問我有沒有比較elegant 的解決辦法。作為一個程序員,能用代碼解決的絕不動手。起初是用Python 寫了個簡單的腳本,通過爬取這些網站的通告,再通過目錄的形式展示出來,方便查看。
但是作為一個iOS 開發(fā),考慮做成個App 來查看更為方便,順帶著也學下后端的知識,自己寫個API,搭建個服務器啥的。經調研打算先從Django 入手。Django 是使用 Python 編寫的一個開源 Web 框架,可以用它來快速搭建一個高性能的網站。本文先入個門,Let's do it!
1.搭建環(huán)境
安裝pip
sudo easy_install pip
安裝Django
sudo pip install Django==1.11
要注意的是要根據自己的Python 版本選擇對應的Django 版本,python 版本對應關系
安裝Django REST framework
sudo pip install djangorestframework
2.跑起來
創(chuàng)建項目
django-admin startproject apiproject
運行Web 服務
python manage.py runserver
在瀏覽器輸入 http://127.0.0.1:8000/ ,看到如下的頁面提示信息
修改語言
settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
改為
# 把英文改為中文
LANGUAGE_CODE = 'zh-hans'
# 把國際時區(qū)改為中國時區(qū)
TIME_ZONE = 'Asia/Shanghai'
刷新下
3.創(chuàng)建應用APP
創(chuàng)建
django-admin.py startapp api
添加App
4.數據庫模型
創(chuàng)建model
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
url = models.CharField(max_length=200)
class Article(models.Model):
title = models.CharField(max_length=200)
date = models.CharField(max_length=50)
url = models.CharField(max_length=200)
category = models.ForeignKey(Category)
遷移數據庫
相當于創(chuàng)建數據庫表
python manage.py makemigrations
python manage.py migrate
創(chuàng)建 Admin 后臺管理員賬戶
用于登錄后臺
python manage.py createsuperuser
在 Admin 后臺注冊模型
from django.contrib import admin
from .models import Category, Article
admin.site.register(Article)
admin.site.register(Category)
運行開發(fā)服務器,訪問 http://127.0.0.1:8000/admin/
輸入賬號密碼
5.序列器(Serializers)
from .models import Article, Category
from rest_framework import serializers
class ArticleSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Article
fields = ('title', 'date', 'url', 'category')
class CategorySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Category
fields = ('name', 'url')
6.視圖(Views)
from .models import Article, Category
from rest_framework import viewsets
from .serializers import ArticleSerializer, CategorySerializer
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
class CategoryViewSet(viewsets.ModelViewSet):
queryset = Category.objects.all()
serializer_class = CategorySerializer
7.URLs
from django.conf.urls import url, include
from rest_framework import routers
from django.contrib import admin
from api import views
router = routers.DefaultRouter()
router.register(r'articles', views.ArticleViewSet)
router.register(r'categorys', views.CategoryViewSet)
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include(router.urls)),
# url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
8.測試API
http://127.0.0.1:8000/articles/
這時還沒有數據,需要往數據庫里添加幾條數據
這里有個問題輸入中文后,后續(xù)添加修改會出現編碼錯誤的頁面
需要在manager.py 添加這段代碼就沒問題了
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
添加通告
再試一下,YES!雞凍!
但是這里發(fā)現個小問題,category字段應該只是分類的名字,我們改下序列器,順便把id 也加上
class ArticleSerializer(serializers.HyperlinkedModelSerializer):
category = serializers.ReadOnlyField(source='category.name')
class Meta:
model = Article
fields = ('id', 'title', 'date', 'url', 'category')
class CategorySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Category
fields = ('id', 'name', 'url')
再試下
大功告成!三個小時的成果,對于新手來說已經很爽了
后續(xù)
目前只是本地服務,而且只有一個API,之后會完善更多的API,并且部署到阿里云的服務器上,先定下這個小目標吧!生命在于折騰!