树莓派搭建Django Web服务

最近工作忙碌,睡觉都不是很充足,实在有点忙不过来,业务上的需求一直压着技术,上面在年初就声明了今年注定是舍命狂奔,关键是忙还不能犯错,阿里的老同事也很无奈的说,为过程鼓掌,为结果买单,这可能就是阿里。 我最近买了树莓派,很希望好好利用做点事情,但是也没太多时间去搞,最近也是因为某人想要做个简单的网页,在树莓派上搭建一个外网可以访问的网页,虽然页面简单,但是包括了整个链路上的所有部分,这篇文章也是总结一下一些基本的原理和一些需要注意的问题。

manage.py 就是启动django的文件,运行的命令也是python manage.py runserver就开启了服务器. settings里面配置了服务器的基本配置,例如默认的端口,允许访问的IP,还有浏览器请求的页面所在路径等等。 urls配置了请求的url和对应的函数的映射关系,一个请求过来了具体执行哪个函数,就是在这里配置。 默认不允许其他机器访问django(我也不太清楚为什么django要这样设置,可能还是为了安全吧).需要在settings.py里面添加:

ALLOWED_HOSTS = [*]

这个是代表能访问的ip,*就代表所有的其他机器。 templates包含

## 页面模版存放路径
TEMPLATE_DIRS = [
    BASE_DIR + /pages/
]
TEMPLATES = [
    {
        BACKEND: django.template.backends.django.DjangoTemplates,
        DIRS: [/Users/xxxxpages/],
        APP_DIRS: True,
        OPTIONS: {
            context_processors: [
                django.template.context_processors.debug,
                django.template.context_processors.request,
                django.contrib.auth.context_processors.auth,
                django.contrib.messages.context_processors.messages,
            ],
        },
    },
]

urls的配置

// getWorkerInfoByName为浏览器的请求路径,WorkerController.getWorkerInfoByName就对应这个WorkerController模块的方法
urlpatterns = [
    path(admin/, admin.site.urls),
    path(hello/, test.index, name = "index"),
    path(page/, test.test_page, name = "page"),
    path(getWorkerInfoByName/, WorkerController.getWorkerInfoByName, name = "getWorkerInfoByName"),
    path(insertWorker/, WorkerController.insertWorker, name = "insertWorker")
]

这样在浏览器访问就能访问到WorkerController.getWorkerInfoByName,这其实就是请求的路由过程,这跟Java SpringMVC的 RequestMapping都一样的。 接下来介绍一下我自己定义的文件夹模块,controller统一为所有请求的路由函数。dao封装了数据库的访问,model为对应表的类。pages下面就对应页面。 在树莓派上只要遇到中文,Django就会报错,这个是因为python3使用unicode编码导致,要么去修改系统的编码都比较麻烦,最后最简单的办法就是启动服务的时候使用:

PYTHONIOENCODING=utf-8 python3 manage.py runserver 0.0.0.0:8080

可以不添加0.0.0.0:8080使用默认的8000端口. 如果需要在一个目录下面引用在父目录的另一个子目录,最简单的方法就是:

import sys
sys.path.append("./xx/")
import module_name

在path里面添加对应的目录名。然后再import,这里vscode无法识别的bug,不用管它的错误提示。

    ngrok外网映射 在局域网内希望让外网可以访问,这就需要有公网ip,可以使用ngrok做映射,注册一个ngrok账号,然后下载./ngrok 8000就可以开启映射。然后去ngrok控制台就可以看到暴露的公网域名。 以上就是利用树莓派搭建Django web服务的主要问题,还有一些小问题都没记录,例如jquery的ajax总是不执行success,用postman工具发现请求返回正常json,发现jquery需要严格json格式。还有一些其他问题欢迎给我留言。
经验分享 程序员 微信小程序 职场和发展