一.安装python3
1.安装python依赖环境。
$ sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev
2.下载python3.6版本源码并解压。
$ wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
$ tar zxvf Python-3.6.1.tgz
3.编译安装。挺慢的。
$ cd Python-3.6.1
$ sudo ./configure
$ sudo make
$ sudo make install
4.检查安装。
$ ls -al /usr/local/bin/python*
lrwxrwxrwx 1 root staff 9 May 15 14:53 /usr/local/bin/python3 -> python3.6
-rwxr-xr-x 2 root staff 9840168 May 15 14:51 /usr/local/bin/python3.6
lrwxrwxrwx 1 root staff 17 May 15 14:53 /usr/local/bin/python3.6-config -> python3.6m-config
-rwxr-xr-x 2 root staff 9840168 May 15 14:51 /usr/local/bin/python3.6m
-rwxr-xr-x 1 root staff 3103 May 15 14:53 /usr/local/bin/python3.6m-config
lrwxrwxrwx 1 root staff 16 May 15 14:53 /usr/local/bin/python3-config -> python3.6-config
上述步骤针对的是树莓派没有python的,但是我装的系统自带python2和python3。默认是python2,使用的是3,需要修改成python,即修改优先级。
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
二.上传后端代码,使用requirements.txt安装环(包)
注意!!!!!!如果开机自启动的话一定要在root@ sudo下安装。
pip freeze > requirements.txt
pip install -r requirements.txt
三.启动后端
1.配置数据库 。
python manage.py makemigrations
python manage.py migrate
2.启动后端。
python manage.py runserver 192.168.162.181:8000 # 启动
3.测试接口。
报错:
Invalid HTTP_HOST header: '192.168.162.181:8001'. You may need to add '192.168.162.181' to ALLOWED_HOSTS.
解决:添加准许的hosts,在settings.py中修改。
ALLOWED_HOSTS = ['*']
4.再次测试,通过。
四.配置django自启动
备注:前面教程中有配置静态IP(一)树莓派配置步骤(配置图形化界面),但是配置无法生效,所以现在无法实现django的自启动。
1.重新配置静态ip。
2.自启动设置。
1.参照网上的修改etc/rc.local文件
sudo python /home/pi/register/manage.py runserve 192.168.139.181:8001
发现问题,是root用户无法识别到Django,因为我的Django是在pi用户下安装的。所以安装的时候需要让root用户知道有这个东西。
如果我在pi账号下,就可以启动。
树莓派可以正常启动连接热点,但是!我ssh没法连接了,那个vnc也连接不了了!!!
我手里没显示器啊,GG了。等下午找个显示器了。
解决方法见:解决SSH和VNC无法连接树莓派的问题
2.将程序作为服务启动
参考:树莓派上设置程序开机自启动;树莓派开机自启动的方法(解决rc.local开机不启动)
五.关于IP地址的设置的理解
树莓派作为服务器,安装了MySQL和Django,有多处地方应用了IP,需要特别注意。
在上述过程中,我无法配置静态IP导致每次连接都需要手动更改数据库的IP和启动Django的IP。这样做不怎么对。正确的做法是:
1.Django连接MySQL数据库时的IP使用localhost(127.0.0.1)
'ENGINE': 'django.db.backends.mysql',
'NAME': "blog",
'USER': 'root',
'PASSWORD': '密码',
'HOST': '127.0.0.1',
'PORT': '3306',
但这样会报错。
django.db.utils.InternalError: (1698, "Access denied for user 'root'@'localhost'")
报错原因是‘USER’应该是非root用户,所以需要新建一个用户赋予它权限。
在MySQL下创建用户。
create user '用户名'@'%' identified by '密码'; # 创建用户
grant all on *.* to '用户名'@'%'; # 授权
flush privileges; # 刷新权限
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'register',
'USER': 'register',
'PASSWORD': '密码',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS':{
'init_command':'SET sql_mode="STRICT_TRANS_TABLES"'
}
}
}
2.启动Django服务设置的IP应该为0.0.0.0。
python manage.py runserver 182.168.139.181:8000
改为
Python manage.py runserver 0.0.0.0:8000
原因:参考:服务器中启动服务时候的IP选择:127.0.0.1 vs 0.0.0.0
当一个服务器监听 0.0.0.0 IP地址的话,意味着:监听所有的网络请求。
如果一个服务器有两个IP地址:192.168.1.1和10.1.2.1,则本机中的一个服务监听0.0.0.0的话,则两个IP地址都可以访问该服务
3.局域网内连接树莓派的IP是,动态IP 192.168.139.181。