全栈之路——android搭配Django
找了好多文章才把这套搞定,真的佩服国人的文章,要不要更新维护下啊,你代码给一半,我自己脑补啊。
对了,这里面有的软件版本号对不上,不过不影响,有影响的我会提。
总体上,
server选择Django,数据库是Mysql,
android就是android,不过引入了Retrofit2.0用来进行通信
通信数据格式走json
一 Django搭建
这个没啥说的,网上一大堆教程,注意我用的
1.1 python安装
Python 3.6.1,没装的,就装这个吧,选择自己的操作系统对应的版本,装了2.7的自己改环境变量哦。
1.2 Django安装
我推荐用
pip install Django==1.11.7
当然可以测试下安装是否成功
版本号1.11.61.3 创建Django后台
下面要开车了,跟上节奏啊。
1、随便找个目录然后执行
django-admin.py startproject Exam
Exam是项目名,你愿意叫HelloWorld也行啊
成功后会生成一个Exam的文件夹
python manage.py startapp Server
Server是APP名,其实是一个实际应用的意思,名字跟你的业务有关,随便你叫啥
2、修改配置
修改settings.py里面的INSTALLED_APPS添加'Server',
注意Server是上一步的APP名
3、创建数据库和表
自己装个MySQL,然后建个database,我取名叫exam
4、Django生成表
在Exam\Server\models.py里加入你要的表名
class User(models.Model):
name = models.CharField(max_length=200)
age = models.IntegerField(default=0)
phone = models.CharField(max_length=20)
def __unicode__(self):
return self.name
5.修改settings.py里面的DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
'NAME': 'exam',
'USER': 'root',
'PASSWORD': '12345',
'HOST':'localhost',
'PORT':'3306',
}
}
6、自动生成表,需要两步
python manage.py makemigrations
python manage.py migrate
之后每次修改,只需要执行python manage.py migrate这一句就好
7、urls.py添加一条url映射
url(r'^regist/', servermanage.regist),
8、做一些Django的坑处理
修改settings.py里面
ALLOWED_HOSTS = ['*']
这句是让别的ip可以连接到server上
修改 MIDDLEWARE
注释掉这一句#'django.middleware.csrf.CsrfViewMiddleware',
9、启动server
python manage.py runserver 0.0.0.0:9527
0.0.0.0的意思是任一一个ip都可以访问,9527是端口号,别跟其他应用的端口号重复就行
二、Android引入Retrofit2.0
2.1Android Gradle添加retrofit
在app的build.gradle的dependencies添加
compile'com.squareup.retrofit2:converter-gson:2.0.2'
compile'com.squareup.retrofit2:retrofit:2.3.0'
因为后面要用到json解析数据,所以在加一个
compile'com.google.code.gson:gson:2.8.2'
2.2Retrofit2.0使用
UserEntity userEntity =new UserEntity(15,etName.getText().toString(),etPhone.getText().toString());生成一个用户
Gson gson =new Gson();调用Gson
String sjson = gson.toJson(userEntity);把刚才的用户信息转成字符串
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(Config.baseurl)
.addConverterFactory(GsonConverterFactory.create())
.build();
创建一个负责通信的对象,用于向baseurl,这个是你server的ip和端口,也就是9527,发送和接收报文
RetrofitInteface.regist rigistRoute = retrofit.create(RetrofitInteface.regist.class);
创建接口,里面是Post等方法,以及回调的接口
RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),sjson);
生成报文
Call call = rigistRoute.postRoute(body);
发送报文
call.enqueue(newCallback() {
@Override
public voidonResponse(Call call, Response response) {
Toast.makeText(MainActivity.this, response.body().getContent(), Toast.LENGTH_LONG).show();
}
@Override
public voidonFailure(Call call, Throwable t) {
}
});
这段是结果的回调,其中response.body()便是你在回调接口中使用的类
public class RetrofitInteface {
public interfaceregist {
@Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头
@POST("regist/")
Call<Result> postRoute(@BodyRequestBody route);//传入的参数为RequestBody
}
}
于是就可以愉快的与server通信了
至于代码,你们可以联系我,就不公开了。毕竟不是开源项目。或者周末我写个demo,看心情了。