django2.0 + python37 + vue 實戰 網站開發,安卓app生成


最近接到一個需求,要做一個安卓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跨域問題:需要安裝一個插件來解決跨域問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM