怎么使用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的服务器端的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: locker server启动
- 下一篇: DELPHI编程环境