这是我用flask框架的代码,就是等到前端的post请求然后处理并返回数据
from flask import Flask, request
from flask_restful import Resource, Api
from flask_cors import CORS
import hashlib
import pymysql
app = Flask(__name__)
api = Api(app)
CORS(app)
conn = pymysql.connect(host='localhost', user='root', password='123456789', db='python_mysqlclient_test', charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
class Register(Resource):
def post(self):
data = request.json
username = data.get('username')
password = data.get('password')
hash_password = hashlib.sha256(password.encode()).hexdigest()
cursor = conn.cursor()
cursor.execute('SELECT * FROM app01_userinfo WHERE username=%s', (username,))
result = cursor.fetchone()
if result:
return {'message': 'User already exists.'}, 400
cursor.execute('INSERT INTO app01_userinfo (username, password) VALUES (%s, %s)', (username, hash_password))
conn.commit()
return {'message': 'Registration successful.'}, 201
class Login(Resource):
def post(self):
data = request.json
username = data.get('username')
password = data.get('password')
hash_password = hashlib.sha256(password.encode()).hexdigest()
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE username=%s AND password=%s', (username, hash_password))
result = cursor.fetchone()
if not result:
return {'message': 'Invalid credentials.'}, 401
return {'message': 'Login successful.'}, 200
api.add_resource(Register, '/register')
api.add_resource(Login, '/login')
if __name__ == '__main__':
app.run(debug=True)
这是flutter前端的代码,我不知道前端代码是不是少了什么,好像运行不起来,有没有完整的代码补充,比如说Myapp状态类啥的,里面的body是用到了这个post请求的类,总之就是build这个地方不知道怎么写,因为没写过flutter表单,前端不完整,希望有能完整运行的代码补全
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class RegisterScreen extends StatefulWidget {
const RegisterScreen({Key? key}) : super(key: key);
@override
State<RegisterScreen> createState() => _RegisterScreenState();
}
class _RegisterScreenState extends State<RegisterScreen> {
final _formKey = GlobalKey<FormState>();
final _usernameController = TextEditingController();
final _passwordController = TextEditingController();
Future<void> _register() async {
final response = await http.post(
Uri.parse('http://localhost:5000/register'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'username': _usernameController.text,
'password': _passwordController.text,
}),
);
if (response.statusCode == 201) {
Navigator.pushReplacementNamed(context, '/home');
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(jsonDecode(response.body)['message'])),
);
}
}
@override
Widget build(BuildContext context) {
return const Placeholder();
}
}