日韩性视频-久久久蜜桃-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的服务器端的全部內容,希望文章能夠幫你解決所遇到的問題。

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