日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

怎么使用python实现android的服务器端

發布時間:2023/12/15 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 怎么使用python实现android的服务器端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇“怎么使用python實現android的服務器端”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“怎么使用python實現android的服務器端”文章吧。

Django(python)簡單實現android的服務器端

1. 所需工具

PyCharm--python編輯工具,這里要寫Django,因此必須是專業版,社區版沒有此功能。
MySql--登錄信息需要存儲到數據庫里面。
Android Studio--用于手機端代碼的編寫。

2. 服務器端的實現

2.1. 新建一個Django項目,命名為:androidSevers
2.2. 為androidSevers添加一個APP模塊:Login_sever

pythonmanage.pystartappLogin_sever

完成后效果如圖所示

2.3. 數據庫連接及其setting.py配置
添加APP

連接MySQL(大小寫嚴格區分)

DATABASES={
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'androidsevers',
'USER':'root',
'PASSWORD':'123456',
'PORT':3306,
'HOST':'',
}
}

2.4. 通過設計model.py,映射到數據庫。

fromdjango.dbimportmodels

#Createyourmodelshere.
classLogin(models.Model):
ID=models.AutoField(primary_key=True)
username=models.CharField(max_length=25,verbose_name='用戶名')
password=models.CharField(max_length=25,verbose_name='密碼')
adminname=models.CharField(max_length=25,verbose_name='用戶姓名')

2.5. 將model.py映射到數據庫
在pycharm下面的終端下執行
創建遷移文件

pythonmanage.pymakemigrations

將遷移文件寫入數據庫

pythonmanage.pymigrate

執行完成后,在數據庫里顯示,如圖所示。

在數據庫里寫入一條記錄,用于測試。如

2.5. 配置路由信息,urls.py

fromdjango.contribimportadmin
fromdjango.urlsimportpath
fromLogin_severimportviews
urlpatterns=[
path('admin/',admin.site.urls),
path('login/',views.login_view)
]

2.6. 對數據的操作views.py

fromdjango.core.exceptionsimportObjectDoesNotExist
fromdjango.httpimportHttpResponse
fromdjango.shortcutsimportrender
fromLogin_sever.modelsimportLogin
importjson
deflogin_view(request):
ifrequest.method=='POST':
username=request.POST.get('username')
password=request.POST.get('password')
date_error={
'username':username,
'adminname':'',
'code':'錯誤,用戶不存在',
'StatusCode':404
}
try:
user=Login.objects.get(username=username)
ifuser.password==password:
data={
'username':user.username,
'adminname':user.adminname,
'code':'成功',
'StatusCode':200
}
returnHttpResponse(json.dumps(data),content_type='application/json')
else:
date_error={
'username':username,
'adminname':'',
'code':'密碼錯誤',
'StatusCode':404
}
returnHttpResponse(json.dumps(date_error),content_type='application/json')
exceptObjectDoesNotExist:
returnHttpResponse(json.dumps(date_error),content_type='application/json')
else:
returnHttpResponse('GET請求無效')

2.7. 啟動服務器
2.7.1. 查詢服務器的IP地址

ipconfig

2.7.2. 在setting里面配置IP地址
將這里修改為你的IP地址

2.7.3. 啟動服務器
在pycharm的終端中輸入

pythonmanage.pyrunserver192.168.0.104:8000

服務器端完成

3. 客戶端的實現

3.1. 用android創建一個工程:androidclient
3.2. 新建一個LoginActivity
3.3. 新建一個類Login_cs
完成后如圖所示

3.4. 在Login_cs里面寫入

publicclassLogin_cs{
/**
*username:admin
*adminname:李東陽
*code:成功
*StatusCode:200
*/
privateStringusername;
privateStringadminname;
privateStringcode;
@SerializedName("StatusCode")
privateint_$StatusCode185;//FIXMEcheckthiscode
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetAdminname(){
returnadminname;
}
publicvoidsetAdminname(Stringadminname){
this.adminname=adminname;
}
publicStringgetCode(){
returncode;
}
publicvoidsetCode(Stringcode){
this.code=code;
}
publicintget_$StatusCode185(){
return_$StatusCode185;
}
publicvoidset_$StatusCode185(int_$StatusCode185){
this._$StatusCode185=_$StatusCode185;
}
}

3.5. 修改配置文件AndroidManifest.xml

<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidclient">
<uses-permissionandroid:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activityandroid:name=".LoginActivity">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activityandroid:name=".MainActivity"></activity>
</application>
</manifest>

3.6. 添加依賴

implementation'com.squareup.okhttp3:okhttp:3.10.0'
implementation'com.google.code.gson:gson:2.6.2'

3.7. 設置activity_login.xml

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".LoginActivity">
<EditText
android:layout_marginTop="35dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入用戶名"
android:gravity="center"
android:textSize="25dp"
android:id="@+id/tvUserName"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入密碼"
android:textSize="25dp"
android:gravity="center"
android:inputType="textPassword"
android:id="@+id/tvPassword"/>
<Button
android:id="@+id/btnLogin"
android:layout_marginTop="25dp"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:background="#03A9F4"
android:text="登錄"
android:textColor="#fff"
android:textSize="25dp"
android:paddingLeft="35dp"
android:paddingRight="35dp"
android:layout_height="wrap_content"/>
</LinearLayout>

3.8. 設置LoginActivity.java

packagecom.example.androidclient;

importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.text.TextUtils;
importandroid.util.Log;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.Toast;

importandroidx.appcompat.app.AppCompatActivity;

importcom.google.gson.Gson;

importjava.io.IOException;

importokhttp3.Call;
importokhttp3.Callback;
importokhttp3.FormBody;
importokhttp3.OkHttpClient;
importokhttp3.Request;
importokhttp3.Response;

publicclassLoginActivityextendsAppCompatActivityimplementsView.OnClickListener{

privateEditTexttvUserName;
privateEditTexttvPassword;
privateButtonbtnLogin;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
}

privatevoidinitView(){
tvUserName=(EditText)findViewById(R.id.tvUserName);
tvPassword=(EditText)findViewById(R.id.tvPassword);
btnLogin=(Button)findViewById(R.id.btnLogin);

btnLogin.setOnClickListener(this);
}

@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.btnLogin:
submit();
break;
}
}

privatevoidsubmit(){
//validate
StringtvUserNameString=tvUserName.getText().toString().trim();
if(TextUtils.isEmpty(tvUserNameString)){
Toast.makeText(this,"請輸入用戶名",Toast.LENGTH_SHORT).show();
return;
}

StringtvPasswordString=tvPassword.getText().toString().trim();
if(TextUtils.isEmpty(tvPasswordString)){
Toast.makeText(this,"請輸入密碼",Toast.LENGTH_SHORT).show();
return;
}

//TODOvalidatesuccess,dosomething
InternetSever(tvUserNameString,tvPasswordString);
}
privatevoidInternetSever(Stringusername,Stringpassword){
OkHttpClientclient=newOkHttpClient();
FormBodybody=newFormBody.Builder()
.add("username",username)
.add("password",password)
.build();
finalRequestrequest=newRequest.Builder()
.url("http://192.168.0.104:8000/login/")
.post(body)
.build();
client.newCall(request).enqueue(newCallback(){
@Override
publicvoidonFailure(Callcall,IOExceptione){
Toast.makeText(LoginActivity.this,"網絡異常,請稍后再試!",Toast.LENGTH_SHORT).show();

}

@Override
publicvoidonResponse(Callcall,Responseresponse)throwsIOException{

finalStringdate=response.body().string();
runOnUiThread(newRunnable(){
@Override
publicvoidrun(){
Gsongson=newGson();
Login_cslogin_cs=gson.fromJson(date,Login_cs.class);
if(login_cs.get_$StatusCode185()==200){
Toast.makeText(LoginActivity.this,"歡迎登錄,"+login_cs.getAdminname(),Toast.LENGTH_SHORT).show();
startActivity(newIntent(LoginActivity.this,MainActivity.class));
}else{
Toast.makeText(LoginActivity.this,login_cs.getCode(),Toast.LENGTH_SHORT).show();
tvPassword.setText("");
tvUserName.setText("");
}


}
});

}
});


}
}

客戶端完成

4.測試

總結

以上是生活随笔為你收集整理的怎么使用python实现android的服务器端的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 女的被男的操 | 国产色无码精品视频国产 | 男女一级片 | 玖玖精品在线视频 | 性欧美大战久久久久久久久 | 欧美成人国产va精品日本一级 | 无码人妻丰满熟妇啪啪网站 | 在线免费观看日韩av | 先锋av资源网 | 四虎影院新网址 | 国产福利小视频在线 | 国产一区二区三区免费视频 | 精品人成| 欧美成人一二区 | 五月天综合婷婷 | 亚洲视频1区 | 日韩大尺度视频 | 潘金莲激情呻吟欲求不满视频 | 老妇裸体性激交老太视频 | 制服 丝袜 综合 日韩 欧美 | 18禁免费观看网站 | 国产经典毛片 | 色激情网| 精品一区二区三区免费毛片 | 国产极品福利 | 国产一区二区久久精品 | 2025国产精品视频 | 一区二区在线国产 | 日韩 国产 一区 | 天天曰| 免费日本黄色 | 日韩亚洲视频 | 久久久久久久久久电影 | 男男做的视频 | 西西人体大胆4444ww张筱雨 | 亚洲va在线∨a天堂va欧美va | 日韩高清片| 公交上高潮的丁芷晴 | 国产资源一区 | 日韩成人黄色 | 午夜黄色av | 中文亚洲字幕 | 黄色网免费观看 | 在线免费观看视频你懂的 | 九九人人 | 色综合久久久久 | 无人在线观看的免费高清视频 | 日韩一级片视频 | 天堂网色 | 凹凸精品熟女在线观看 | 爱爱精品| 亚洲国产成人一区 | 精品人妻午夜一区二区三区四区 | 成人看片在线 | 黑人操bb| 国产亚洲综合精品 | 国产69av| 欧美丰满美乳xxⅹ高潮www | 精品无码国产污污污在线观看 | 一区二区日本 | 亚洲午夜网 | 老司机av导航 | 啪网址| 黄色大片视频网站 | 五月婷婷激情综合 | 久视频在线观看 | 亚洲色鬼| 精品视频第一页 | 国产黄色a | 91午夜交换视频 | 韩国av一区二区 | 热久久伊人 | 人妻 丝袜美腿 中文字幕 | 蜜臀久久99静品久久久久久 | 青青伊人影院 | 亚洲精选久久 | 性生活av | 欧美另类第一页 | 完全免费av | 黄色片链接 | wwwa级片 | 亚洲视频一区在线 | 深爱激情站 | 国内精品一区二区三区 | 中文字幕免费高 | 岛国片在线免费观看 | 中文字幕av专区dvd | 久久6精品 | 91大片在线观看 | 干美女少妇 | 精品国产三级a∨在线 | 成人做爰www免费看视频网站 | 少妇被躁爽到高潮无码文 | 差差差30分钟 | 精品人妻一区二区三区浪潮在线 | 亚洲av无码一区二区乱子仑 | 国产999视频 | 人妻丰满熟妇av无码区hd | 欧美久久久久久久久久久久久久 |