django+小程序的心酸过程

工具是Python3.6+Django2.0,最新版本真的很令人头疼,经常有插件不能用。

先说说我对Django做小程序的与Django普通项目感到有些不同的地方。

一、数据转换为json;

二、使用小程序的登录验证;

三、富文本在小程序中的使用。

这几点就是导致我头疼的所有点了。

其实还有一个,因为后台居然被嫌弃简陋,所以去搞了一个xadmin的模板,然而人家不兼容2.0,折腾了半天才弄好。

首先讲一下json的转换,这个使我头疼是因为原来做的项目并没有一定要使用json,我嫌烦就一直没用过,这回才使我无比痛苦。

转换json我使用的是两个框架并合起来:

pip install django-simple-serializer

pip install django-rest-framwork

使用:

from dss.Serializer import serializer
from rest_framework.views import APIView
def response_as_json(data, foreign_penetrate=False):
    jsonString = serializer(data=data, output_type="json", foreign=foreign_penetrate, datetime_format='string',
                            many=True)
    response = HttpResponse(
        # json.dumps(dataa, cls=MyEncoder),
        jsonString,
        content_type="application/json",
    )
    response["Access-Control-Allow-Origin"] = "*"
    return response


def json_response(data, code=200, foreign_penetrate=False, **kwargs):
    data = {
        "code": code,
        "msg": "成功",
        "data": data,
    }
    return response_as_json(data, foreign_penetrate=foreign_penetrate)


def json_error(error_string="", code=500, **kwargs):
    data = {
        "code": code,
        "msg": error_string,
        "data": {}
    }
    data.update(kwargs)
    return response_as_json(data)


JsonResponse = json_response
JsonError = json_error

这是前提,之后对于项目中的使用为:

class NewsList(APIView):

    def get(self, request, *args, **kwargs):
        news = News.objects.values('id', 'title', 'img')
        #使用了分页
        limit = 5
        paginor = paginator.Paginator(news, limit)
        page = request.GET.get('page', 1)
        item_info = paginor.page(page)
        data = {
            'news': item_info
        }
        return JsonResponse(data)

#urls.py

path('news', views.NewsList.as_view()),

顺带把小程序的代码也放上:

//http.js

var HOST_ROOT = "https://localhost/api/";

function generateUrl(url) {

var timestamp = new Date().getTime().toString().substring(0, 10);

var sign = generateSign(timestamp);

return HOST_ROOT + url;

};

#news.js

var http = require("../../utils/http.js");

getNews: function () {

var url = http.generateUrl('news?page='+page);

var content = this;

wx.showLoading();

wx.request({

url: url,

method: 'GET',

success: function (res) {

//success

wx.hideLoading();

if (res.statusCode == 200) {

content.setData({

newslist:content.data.newslist.concat(res.data.data.news),

});

page++;

} else {

wx.hideLoading();

content.setData({

addmore: "到底了"

});

}

},

})

},

以上。

猜你喜欢

转载自blog.csdn.net/lala55lan20/article/details/82787484