找了好多文章才把這套搞定壤蚜,真的佩服國人的文章即寡,要不要更新維護(hù)下啊,你代碼給一半袜刷,我自己腦補(bǔ)啊聪富。
對了,這里面有的軟件版本號對不上著蟹,不過不影響墩蔓,有影響的我會提。
總體上草则,
server選擇Django钢拧,數(shù)據(jù)庫是Mysql,
android就是android炕横,不過引入了Retrofit2.0用來進(jìn)行通信
通信數(shù)據(jù)格式走json
一 Django搭建
這個(gè)沒啥說的源内,網(wǎng)上一大堆教程,注意我用的
1.1 python安裝
Python 3.6.1份殿,沒裝的膜钓,就裝這個(gè)吧,選擇自己的操作系統(tǒng)對應(yīng)的版本卿嘲,裝了2.7的自己改環(huán)境變量哦颂斜。
1.2 Django安裝
我推薦用
pip install Django==1.11.7
當(dāng)然可以測試下安裝是否成功
1.3 創(chuàng)建Django后臺
下面要開車了,跟上節(jié)奏啊拾枣。
1沃疮、隨便找個(gè)目錄然后執(zhí)行
django-admin.py startproject Exam
Exam是項(xiàng)目名,你愿意叫HelloWorld也行啊
成功后會生成一個(gè)Exam的文件夾
python manage.py startapp Server
Server是APP名梅肤,其實(shí)是一個(gè)實(shí)際應(yīng)用的意思司蔬,名字跟你的業(yè)務(wù)有關(guān),隨便你叫啥
2姨蝴、修改配置
修改settings.py里面的INSTALLED_APPS添加'Server',
注意Server是上一步的APP名
3俊啼、創(chuàng)建數(shù)據(jù)庫和表
自己裝個(gè)MySQL,然后建個(gè)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
之后每次修改跛十,只需要執(zhí)行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的意思是任一一個(gè)ip都可以訪問,9527是端口號,別跟其他應(yīng)用的端口號重復(fù)就行
二屏轰、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'
因?yàn)楹竺嬉玫絡(luò)son解析數(shù)據(jù)颊郎,所以在加一個(gè)
compile'com.google.code.gson:gson:2.8.2'
2.2Retrofit2.0使用
UserEntity userEntity =new UserEntity(15,etName.getText().toString(),etPhone.getText().toString());生成一個(gè)用戶
Gson gson =new Gson();調(diào)用Gson
String sjson = gson.toJson(userEntity);把剛才的用戶信息轉(zhuǎn)成字符串
Retrofit retrofit=new Retrofit.Builder()
? ? ? ? ? ? ? ? ? ? ? ? ? ?.baseUrl(Config.baseurl)
? ? ? ? ? ? ? ? ? ? ? ? ? ?.addConverterFactory(GsonConverterFactory.create())
? ? ? ? ? ? ? ? ? ? ? ? ? ?.build();
創(chuàng)建一個(gè)負(fù)責(zé)通信的對象,用于向baseurl霎苗,這個(gè)是你server的ip和端口姆吭,也就是9527,發(fā)送和接收報(bào)文
RetrofitInteface.regist rigistRoute = retrofit.create(RetrofitInteface.regist.class);
創(chuàng)建接口唁盏,里面是Post等方法内狸,以及回調(diào)的接口
RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),sjson);
生成報(bào)文
Call call = rigistRoute.postRoute(body);
發(fā)送報(bào)文
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) {
? ? }
});
這段是結(jié)果的回調(diào),其中response.body()便是你在回調(diào)接口中使用的類
public class RetrofitInteface {
? ? public interfaceregist {
? ? ? ? @Headers({"Content-Type: application/json","Accept: application/json"})//需要添加頭
? ? ? ? @POST("regist/")
? ? ? ? Call<Result> postRoute(@BodyRequestBody route);//傳入的參數(shù)為RequestBody
? ? }
}
于是就可以愉快的與server通信了
至于代碼厘擂,你們可以聯(lián)系我昆淡,就不公開了。畢竟不是開源項(xiàng)目刽严“毫椋或者周末我寫個(gè)demo,看心情了舞萄。