这篇“怎么使用python实现android的服务器端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用python实现android的服务器端”文章吧。
Django(python)简单实现android的服务器端
1. 所需工具
PyCharm--python编辑工具,这里要写Django,因此必须是专业版,社区版没有此功能。
MySql--登录信息需要存储到数据库里面。
Android Studio--用于手机端代码的编写。
2. 服务器端的实现
1. 新建一个Django项目,命名为:androidSevers
2.2. 为androidSevers添加一个APP模块:Login_sever
python manage.py startapp Login_sever
完成后效果如图所示
数据库连接及其setting.py配置
添加APP
连接MySQL(大小写严格区分)
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'androidsevers', 'USER': 'root', 'PASSWORD': '123456', 'PORT': 3306, 'HOST': '', }}
通过设计model.py,映射到数据库。
from django.db import models# Create your models here.class Login(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='用户姓名')
将model.py映射到数据库
在pycharm下面的终端下执行
创建迁移文件
python manage.py makemigrations
将迁移文件写入数据库
python manage.py migrate
执行完成后,在数据库里显示,如图所示。
在数据库里写入一条记录,用于测试。如
配置路由信息,urls.py
from django.contrib import adminfrom django.urls import pathfrom Login_sever import viewsurlpatterns = [ path('admin/', admin.site.urls), path('login/',views.login_view)]
对数据的操作views.py
from django.core.exceptions import ObjectDoesNotExistfrom django.http import HttpResponsefrom django.shortcuts import renderfrom Login_sever.models import Loginimport jsondef login_view(request): if request.method=='POST': username=request.POST.get('username') password=request.POST.get('password') date_error={ 'username': username, 'adminname': '', 'code':'错误,用户不存在', 'Status Code': 404 } try: user=Login.objects.get(username=username) if user.password==password: data={ 'username':user.username, 'adminname':user.adminname, 'code': '成功', 'Status Code': 200 } return HttpResponse(json.dumps(data), content_type='application/json') else: date_error = { 'username': username, 'adminname': '', 'code': '密码错误', 'Status Code': 404 } return HttpResponse(json.dumps(date_error), content_type='application/json') except ObjectDoesNotExist: return HttpResponse(json.dumps(date_error),content_type='application/json') else: return HttpResponse('GET请求无效')
启动服务器
2.7.1. 查询服务器的IP地址
ipconfig
2. 在setting里面配置IP地址
将这里修改为你的IP地址
3. 启动服务器
在pycharm的终端中输入
python manage.py runserver 192.168.0.104:8000
服务器端完成
3. 客户端的实现
1. 用android创建一个工程:androidclient
3.2. 新建一个LoginActivity
3.3. 新建一个类Login_cs
完成后如图所示
在Login_cs里面写入
public class Login_cs { private String username; private String adminname; private String code; @SerializedName("Status Code") private int _$StatusCode185; // FIXME check this code public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAdminname() { return adminname; } public void setAdminname(String adminname) { this.adminname = adminname; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public int get_$StatusCode185() { return _$StatusCode185; } public void set_$StatusCode185(int _$StatusCode185) { this._$StatusCode185 = _$StatusCode185; }}
修改配置文件AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidclient"> <uses-permission android: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"> <activity android:name=".LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity"></activity> </application></manifest>
添加依赖
implementation 'com.squareup.okhttp3:okhttp:3.10.0'implementation 'com.google.code.gson:gson:2.6.2'
设置activity_login.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns: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>
设置LoginActivity.java
package com.example.androidclient;import android.content.Intent;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.google.gson.Gson;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class LoginActivity extends AppCompatActivity implements View.OnClickListener { private EditText tvUserName; private EditText tvPassword; private Button btnLogin; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); initView(); } private void initView() { tvUserName = (EditText) findViewById(R.id.tvUserName); tvPassword = (EditText) findViewById(R.id.tvPassword); btnLogin = (Button) findViewById(R.id.btnLogin); btnLogin.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnLogin: submit(); break; } } private void submit() { // validate String tvUserNameString = tvUserName.getText().toString().trim(); if (TextUtils.isEmpty(tvUserNameString)) { Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show(); return; } String tvPasswordString = tvPassword.getText().toString().trim(); if (TextUtils.isEmpty(tvPasswordString)) { Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show(); return; } // TODO validate success, do something InternetSever(tvUserNameString,tvPasswordString); } private void InternetSever(String username,String password) { OkHttpClient client = new OkHttpClient(); FormBody body = new FormBody.Builder() .add("username", username) .add("password", password) .build(); final Request request = new Request.Builder() .url("http://192.168.0.104:8000/login/") .post(body) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Toast.makeText(LoginActivity.this, "网络异常,请稍后再试!", Toast.LENGTH_SHORT).show(); } @Override public void onResponse(Call call, Response response) throws IOException { final String date=response.body().string(); runOnUiThread(new Runnable() { @Override public void run() { Gson gson=new Gson(); Login_cs login_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(new Intent(LoginActivity.this,MainActivity.class)); }else { Toast.makeText(LoginActivity.this, login_cs.getCode(), Toast.LENGTH_SHORT).show(); tvPassword.setText(""); tvUserName.setText(""); } } }); } }); }}
客户端完成
4.测试
以上就是关于“怎么使用python实现android的服务器端”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。