最近接到一個需求,要做一個安卓app,這個app就一個功能,查看說說
要求是查詢的信息要記錄下來,還要有賬號權限控制
理了下需求:
1 安卓app提供查詢功能
2 記錄查詢的信息(用戶,查詢qq,查詢結果)
3 權限控制(控制用戶是否可以查詢,有效期等)
看了下需求后,發現使用django來做網站后台非常方便快速,還提供了賬號權限系統,另外安卓app開發並非我本行,正好之前一陣子研究過node
發現node可以直接將網頁打包成app,反正這個app功能也就那么幾個,用web來做app就行了,這個web頁還能部署在服務器上面,提供網頁版支持
一舉2得,最終定下來是使用 cordova+vue 項目打包成Android(apk)應用 這篇文章提供的方法來打包安卓app,django提供API接口,這樣就完成了需求
接下去是操作:
首先新建項目一系列操作
新建項目: django-admin startproject myproject 新建APP : python3 manage.py startapp app 創建管理員: python3 manage.py createsuperuser 啟動服務器: python3 manage.py runserver 同步或者更改生成 數據庫: python3 manage.py makemigrations python3 manage.py migrate
后台管理使用xadmin來替代admin,看起來美觀一點
安裝方法-下載這個倉庫:https://github.com/sshwsfc/xadmin/tree/django2
將這個文件夾放入項目目錄下的extra_apps下
下面是我的項目文件目錄習慣,app都放到apps下,插件類都放到extra_apps
接下去就是基本的模型設計,views
模型參考,通過是否激活,有效期來控制用戶操作權限
from django.db import models class Account(models.Model): user_name = models.CharField('用戶名', max_length = 100, unique=True) uuid = models.CharField('注冊機器碼', max_length = 100) is_active = models.BooleanField('是否激活', default = False) dead_line = models.DateField('有效期', null = True, blank = True) forver = models.BooleanField('永久期限', default = False) add_time = models.DateTimeField('注冊時間', auto_now_add = True, blank = True, null = True) class Meta: verbose_name = '用戶列表' verbose_name_plural = verbose_name def __str__(self): return self.user_name
下邊是提供的接口,另外自己做了個小的簽名功能,檢查用戶請求是否合法,過濾非法請求
from django.http import HttpResponse from .models import Account from django.views.generic.base import View from utils.settings import SIGN_KEY from utils.tools import md5 import time from django.views.decorators.csrf import csrf_exempt from user_uuid.models import UserUuid class AccountView(View): @csrf_exempt def get(self, request): user_name = request.GET.get('user_name', False) uuid = request.GET.get('uuid', False) timestamp = request.GET.get('timestamp', False) sign = request.GET.get('sign', False) #檢查用戶名是否為空 if not user_name: return HttpResponse('{"status":"1", "msg":"注冊失敗,請填寫用戶名!"}', content_type='application/json') #檢查參數是否完整 if not uuid or not timestamp or not sign: return HttpResponse('{"status":"1", "msg":"請求無效!"}', content_type='application/json') #檢查請求是否超時 try: if abs(int(time.time() * 1000) - int(timestamp)) > 20000: return HttpResponse('{"status":"1", "msg":"請求超時!"}', content_type='application/json') except: return HttpResponse('{"status":"1", "msg":"請求無效,時間錯誤!"}', content_type='application/json') #檢查簽名 print(md5(user_name + uuid + timestamp + SIGN_KEY), sign) if md5(user_name + uuid + timestamp + SIGN_KEY) != sign: return HttpResponse('{"status":"1", "msg":"簽名錯誤!"}', content_type='application/json') #檢查是否已經注冊 is_register = Account.objects.filter(user_name = user_name) if is_register: return HttpResponse('{"status":"1", "msg":"注冊失敗,用戶名已注冊,請更換用戶名!"}', content_type='application/json') #注冊用戶 user = Account(user_name = user_name, uuid = uuid) user.save() user_uuid = UserUuid(user = user, uuid = uuid) user_uuid.save() return HttpResponse('{"status":"0", "msg":"注冊成功,請聯系客服開通查詢功能。"}', content_type='application/json') @csrf_exempt def post(self, request): return HttpResponse('{"status":"1", "msg":"請求無效!"}', content_type='application/json')
后面的查詢操作就不在復述
接下來是vue來弄前端
使用腳手架快速生成項目
這里使用了ant-design這個庫,感覺挺不錯的,省的自己設計了,還有一些動畫效果也是很不錯的
最終生成安卓app,生成的包也不大,5M左右,就是一個webview,效果還是可以的,能滿足需求
完成開發后的感想:現在的工具是越來越方便了,像我這樣的外行,靠一些教程,也能完成一些簡單的功能
就像vue,之前完全沒有學過,花1小時也能搗鼓點東西出來了,使用ant-design是臨時起意,結果也沒很麻煩
很簡單就完成了需求,當然這和本次需求相當簡單有關,不過整個流程體驗下來,還是相當不錯的
開發工程中碰到的一些問題:
1 node debug運行的時候,修改了東西,重新編譯后,瀏覽器打開很慢,需要1分鍾多,目測和ant-design有關,看進程是在下載一個3m多的app.js文件
2 django跨域問題:需要安裝一個插件來解決跨域問題