全棧之路——android搭配Django

找了好多文章才把這套搞定,真的佩服國人的文章,要不要更新維護下啊,你代碼給一半,我自己腦補啊。

對了,這里面有的軟件版本號對不上,不過不影響,有影響的我會提。

總體上,

server選擇Django,數據庫是Mysql,

android就是android,不過引入了Retrofit2.0用來進行通信

通信數據格式走json

一 Django搭建

這個沒啥說的,網上一大堆教程,注意我用的

1.1 python安裝

Python 3.6.1,沒裝的,就裝這個吧,選擇自己的操作系統對應的版本,裝了2.7的自己改環境變量哦。

3.6.3下載地址

1.2 Django安裝

Django安裝說明

我推薦用

pip install Django==1.11.7

當然可以測試下安裝是否成功


版本號1.11.6

1.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

記得裝5.6哦

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,看心情了。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容