2、编程实现以下功能: (1)在浏览器输入http://127.0.0.1:5000/user/admin重定向到http://127.0.0.1:5000/admin (2)在浏览器输入http://127.0.0.1:5000/user/张三重定向到http://127.0.0.1:5000/guest/张三
时间: 2023-07-10 09:42:10 浏览: 187
同样可以使用 Flask 框架来实现这个功能。下面是一个简单的实现:
```python
from flask import Flask, redirect
app = Flask(__name__)
@app.route("/user/admin")
def redirect_admin():
return redirect("/admin")
@app.route("/user/<name>")
def redirect_guest(name):
return redirect(f"/guest/{name}")
@app.route("/admin")
def admin():
return "欢迎管理员"
@app.route("/guest/<name>")
def guest(name):
return f"欢迎 {name}"
if __name__ == "__main__":
app.run()
```
这个程序同样创建了一个 Flask 应用,定义了两个路由。第一个路由对应访问 /user/admin,会重定向到 /admin。第二个路由对应访问 /user/XXX,其中 XXX 是用户的名字,会重定向到 /guest/XXX。同时,还定义了两个新的路由 /admin 和 /guest/XXX,分别对应管理员页面和普通用户页面,这里只是简单地返回了一些字符串。运行程序后,可以在浏览器中访问上述地址来测试功能是否正常。
相关问题
Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8091/delete2/666 Using the URLconf defined in AndroidPredict.urls, Django tried these URL patterns, in this order: admin/ uploader login/ applogin appreg register/ login_out table user_info [name='user_info'] delete/<str:id_> delete/<str:user_> [name='delete_user'] getUser/ appout ^media/(?P<path>.*)$ The current path, delete2/666, didn't match any of these. You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.我应该怎么配置URL来实现删除功能
根据你提供的信息,当前的URL路径是 `delete2/666`,但是在你的URL配置中没有匹配到这个路径,因此出现了404错误。
如果你想要实现删除功能,你可以在URL配置中添加一个路径匹配规则来处理 `delete2/`路径,例如:
```python
from django.urls import path
from . import views
urlpatterns = [
# ...其他路径规则...
path('delete2/<str:id_>', views.delete2, name='delete2'),
]
```
然后在对应的视图函数中实现删除逻辑即可:
```python
from django.shortcuts import render, redirect
from .models import ModelName
def delete2(request, id_):
# 查找对应的模型实例
model_instance = ModelName.objects.get(id=id_)
# 删除模型实例
model_instance.delete()
# 重定向到其他页面
return redirect('some_page')
```
注意替换上述代码中的 `ModelName` 和 `some_page` 为你自己的模型类名称和重定向路径。
登录时会查询验证数据库中的两个表:user表和studen表,只要满足一个表中存在就可以登录成功。但是student表中的用户登录成功后跳转到stu_home.vue;给出改善后的代码
为了实现您的需求,我们需要对现有的 `login.js` 文件进行修改,并在前端 `login.vue` 中添加逻辑来处理不同用户的跳转。以下是改进后的代码:
### login.js
```javascript
let db = require('../db/index');
exports.login = (req, res) => {
let userid = req.query.userid;
let password = req.query.password;
// 查询 user 表
let sqlUser = 'SELECT * FROM user WHERE userid = ? AND password = ?';
db.query(sqlUser, [userid, password], (err, userData) => {
if (err) {
return res.send({ status: 400, message: "登录失败" });
}
if (userData.length > 0) {
return res.send({ status: 200, message: "登录成功", role: 'admin' });
}
// 如果 user 表没有找到,查询 student 表
let sqlStudent = 'SELECT * FROM student WHERE userid = ? AND password = ?';
db.query(sqlStudent, [userid, password], (err, studentData) => {
if (err) {
return res.send({ status: 400, message: "登录失败" });
}
if (studentData.length > 0) {
return res.send({ status: 200, message: "登录成功", role: 'student' });
}
return res.send({ status: 202, message: '用户名或密码错误' });
});
});
};
exports.register = (req, res) => {
const sql1 = 'SELECT * FROM user WHERE userid = ?';
const sql2 = 'INSERT INTO user (userid, password) VALUES (?, ?)';
db.query(sql1, [req.body.userid], (err, data) => {
if (err) {
return res.send({ status: 400, message: "操作失败" });
}
if (data.length > 0) {
return res.send({ status: 202, message: '用户名已存在' });
} else {
db.query(sql2, [req.body.userid, req.body.password], (err, data) => {
if (err) {
return res.send({ status: 400, message: "注册失败" });
}
res.send({ status: 200, message: "注册成功" });
});
}
});
};
```
### login.vue
```vue
<template>
<el-row style="min-height: 100vh;" class="bg-blue-500">
<el-col :lg="16" :md="12" class="flex items-center justify-center flex-col">
<div class="font-bold text-5xl text-light-500 mb-5">勤以为学</div>
<div class="font-bold text-5xl text-light-500">信以为生</div>
</el-col>
<el-col :lg="8" :md="12" class="bg-light-50 flex items-center justify-center flex-col">
<h2 class="font-bold text-2xl text-blue-500 mb-5">学情监测系统</h2>
<el-form :model="form" :rules="rules" label-width="auto" style="max-width: 600px" ref="formRef">
<el-form-item label="账号" prop="userid">
<el-input v-model="form.userid">
<template #prefix>
<el-icon><User /></el-icon>
</template>
</el-input>
</el-form-item>
<el-form-item prop="password" label="密码">
<el-input v-model="form.password" type="password" show-password>
<template #prefix>
<el-icon><Lock /></el-icon>
</template>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">登录</el-button>
<el-button class="text-light-blue-500" @click="register">注册</el-button>
<div>{{ form.msg }}</div> <!-- 显示错误或成功消息 -->
</el-form-item>
</el-form>
</el-col>
</el-row>
</template>
<script setup>
import { reactive, ref } from 'vue';
import { useRouter } from 'vue-router';
import axios from 'axios';
import Swal from 'sweetalert2';
const form = reactive({
userid: '',
password: '',
msg: ''
});
const rules = {
userid: [
{ required: true, message: '账号不能为空', trigger: 'blur' },
{ pattern: /^\d{10}$/, message: '账号必须是10位数字', trigger: 'blur' }
],
password: [
{ required: true, message: '密码不能为空', trigger: 'blur' },
{ min: 6, message: '密码长度不少于6位', trigger: 'blur' }
]
};
const formRef = ref(null);
const router = useRouter();
const onSubmit = () => {
formRef.value.validate((valid) => {
if (valid) {
axios.get("http://127.0.0.1:3000/login", {
params: {
userid: form.userid,
password: form.password
}
}).then((response) => {
if (response.data.status === 200) {
localStorage.setItem("islogin", "true");
localStorage.setItem("userid", form.userid);
localStorage.setItem("role", response.data.role);
if (response.data.role === 'admin') {
router.push({ name: 'home' });
} else if (response.data.role === 'student') {
router.push({ name: 'stu_home' });
}
Swal.fire({
icon: 'success',
title: '登录成功',
text: `欢迎回来!`
});
} else {
form.msg = response.data.message;
}
}).catch((error) => {
console.error("登录请求失败:", error);
Swal.fire({
icon: 'error',
title: '登录失败',
text: '输入正确的账号和密码'
});
});
} else {
Swal.fire({
icon: 'warning',
title: '验证失败',
text: '请填写正确的账号和密码'
});
}
});
};
const register = () => {
router.push('/register');
};
</script>
<style scoped></style>
```
### 解释
1. **后端 (`login.js`)**:
- 首先查询 `user` 表,如果找到匹配的用户,则返回成功并设置角色为 `admin`。
- 如果 `user` 表没有找到匹配的用户,再查询 `student` 表。
- 如果 `student` 表中有匹配的用户,则返回成功并设置角色为 `student`。
- 如果两个表都没有找到匹配的用户,则返回登录失败的信息。
2. **前端 (`login.vue`)**:
- 在 `onSubmit` 方法中,发送登录请求时,通过 `params` 参数传递 `userid` 和 `password`。
- 根据返回的 `role` 值,决定跳转到不同的页面(`home` 或 `stu_home`)。
- 使用 `localStorage` 存储用户的登录状态、用户ID和角色信息。
这样,学生用户登录成功后将被重定向到 `stu_home.vue` 页面,而管理员用户将被重定向到 `home.vue` 页面。
阅读全文