鱼C论坛

 找回密码
 立即注册
楼主: wp231957

[已解决]最近准备搞个B/S 程序

[复制链接]
 楼主| 发表于 2024-3-5 14:59:39 | 显示全部楼层
FishC 发表于 2024-3-5 14:55
要将这段代码用div包裹起来,并让div在页面中间显示,可以使用CSS来实现。下面是一个示例代码,展示如 ...
  1. <div class="centered-div">
  2.         <form>
  3.             <label for="username">用户名:</label>
  4.             <input type="text" id="username" name="username"><br><br>
  5.             <label for="password">密码:</label>
  6.             <input type="password" id="password" name="password"><br><br>
  7.             <label for="captcha">验证码:</label>
  8.             <input type="text" id="captcha" name="captcha"><br><br>
  9.             <!-- 在这里添加显示图片的HTML代码 -->
  10.         </form>
  11.     </div>
复制代码


如何让这三个label后面的input  实现左对齐  右对齐
另,显示图片的html代码 用什么呢,,img 标签吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-5 14:59:52 | 显示全部楼层
wp231957 发表于 2024-03-05 14:59
用户名:
            
            密码:
         ...


要让这三个label后面的input左对齐和右对齐,可以使用CSS来实现。可以给每个label和input标签添加不同的class,并分别对其进行样式设置。下面是一个示例代码,展示如何实现左对齐和右对齐:                    用户名:                        密码:                        验证码:                                 在上述代码中,我们在用户名和密码label标签前添加了"align-left"类,对应的input标签前添加了"align-right"类。然后在CSS样式中,分别对这两个类设置不同的对齐方式。你可以将上述代码复制到HTML文件中并打开浏览器查看效果。

关于显示图片的HTML代码,确实可以使用img标签来实现。你可以在`<img>`标签的src属性中指定图片的URL或者相对路径。例如,如果你的图片位于同一目录下,并且名为"image.jpg",你可以这样添加图片的HTML代码:

  1. <img src="image.jpg" alt="图片描述">
复制代码


在src属性中填写图片的路径,alt属性用于提供对图片的文字描述。你可以根据具体需求进行调整和扩展,比如设置图片的宽度、高度、样式等。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-5 15:27:38 | 显示全部楼层
FishC 发表于 2024-3-5 12:19
在登录界面添加一个图片验证码是一种常见的防止机器人恶意登录的方式。下面是一个简单的示例代码,使用 ...


关于验证码生成  前端显示到这个新生产的码图片   这个逻辑没有搞清楚
生成验证码的代码 是写在后台的服务器里吗    前端到哪里取获取这个图片呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-5 15:28:22 | 显示全部楼层
wp231957 发表于 2024-03-05 15:27
关于验证码生成  前端显示到这个新生产的码图片   这 ...


对于验证码的生成,有两种常见的方式:

1. 在后台服务器生成并返回验证码图片:在后台服务器中使用Python等编程语言生成验证码图片,并将生成的验证码文本通过API返回给前端。前端可以通过请求该API获取验证码图片,并在页面上展示。

   后台代码示例(使用Flask框架):

  
  1. from flask import Flask, send_file
  2.    from PIL import Image, ImageDraw, ImageFont
  3.    import random

  4.    app = Flask(__name__)

  5.    # 生成验证码
  6.    def generate_verification_code(code_length, font_size, width, height):
  7.        code = ''
  8.        image = Image.new('RGB', (width, height), (255, 255, 255))
  9.        draw = ImageDraw.Draw(image)
  10.        font = ImageFont.truetype('arial.ttf', font_size)
  11.        for i in range(code_length):
  12.            char = random.choice('1234567890')
  13.            code += char
  14.            x = width / code_length * i + random.randint(0, 10)
  15.            y = random.randint(0, height - font_size)
  16.            draw.text((x, y), char, font=font, fill=random_color())
  17.        return code, image

  18.    # 生成随机颜色
  19.    def random_color():
  20.        return tuple(random.randint(0, 255) for _ in range(3))

  21.    @app.route('/captcha')
  22.    def captcha():
  23.        code_length = 4
  24.        font_size = 30
  25.        width = 120
  26.        height = 50

  27.        code, image = generate_verification_code(code_length, font_size, width, height)
  28.        image.save('captcha.png')

  29.        return send_file('captcha.png', mimetype='image/png')

  30.    if __name__ == '__main__':
  31.        app.run()
复制代码


   在前端代码中,可以通过访问`/captcha`路径来获取验证码图片:

  
  1. <img src="/captcha" alt="验证码">
复制代码


   前端会从该API中获取验证码图片,并在页面上展示。

2. 在前端使用JavaScript直接生成验证码图片:使用JavaScript库(如`canvas`)在前端动态生成验证码图片,并将生成的验证码文本存储在某个变量中。然后,将验证码图片展示给用户的同时,也将验证码文本发送给后台进行验证。

   前端代码示例:

  
  1. <canvas id="captchaCanvas"></canvas>
  2.    <button onclick="refreshCaptcha()">刷新验证码</button>

  3.    <script>
  4.    // 生成验证码
  5.    function generateVerificationCode(codeLength) {
  6.        let code = '';
  7.        const charset = '1234567890';
  8.        for (let i = 0; i < codeLength; i++) {
  9.            code += charset.charAt(Math.floor(Math.random() * charset.length));
  10.        }
  11.        return code;
  12.    }

  13.    // 绘制验证码图片
  14.    function drawCaptcha(code) {
  15.        const canvas = document.getElementById('captchaCanvas');
  16.        const ctx = canvas.getContext('2d');
  17.        ctx.clearRect(0, 0, canvas.width, canvas.height);

  18.        // 绘制背景
  19.        ctx.fillStyle = '#FFF';
  20.        ctx.fillRect(0, 0, canvas.width, canvas.height);

  21.        // 绘制验证码文本
  22.        ctx.font = '30px Arial';
  23.        ctx.fillStyle = '#000';
  24.        ctx.textBaseline = 'middle';
  25.        ctx.textAlign = 'center';
  26.        ctx.fillText(code, canvas.width / 2, canvas.height / 2);
  27.    }

  28.    // 刷新验证码
  29.    function refreshCaptcha() {
  30.        const codeLength = 4;
  31.        const code = generateVerificationCode(codeLength);
  32.        drawCaptcha(code);
  33.    }

  34.    // 页面加载完成后初始生成一次验证码
  35.    document.addEventListener('DOMContentLoaded', () => {
  36.        refreshCaptcha();
  37.    });
  38.    </script>
复制代码


   该示例使用`canvas`在前端动态生成验证码图片,并提供一个刷新按钮用于更换验证码。

选择哪种方式,取决于你的需求和开发顺序。第一种方式在服务器端生成验证码可以避免暴露生成算法和减轻前端的压力,但增加了服务器负载。第二种方式由前端直接生成验证码,不需与服务器交互,但需要前端有一定的绘图能力。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 09:12:25 | 显示全部楼层
FishC 发表于 2024-3-5 15:28
对于验证码的生成,有两种常见的方式:

1. 在后台服务器生成并返回验证码图片:在后台服务器中使用P ...

md5值  是一个字符串吧  在python中  如何把 字符串  111111 转换成32位md5值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 09:12:35 | 显示全部楼层
wp231957 发表于 2024-03-07 09:12
md5值  是一个字符串吧  在python中  如何把 字符串   ...


在Python中,可以使用`hashlib`库来进行MD5值的计算。下面是一个示例代码,将字符串"111111"转换为32位的MD5值:

  1. import hashlib

  2. # 定义要转换的字符串
  3. string = "111111"

  4. # 创建MD5对象
  5. md5 = hashlib.md5()

  6. # 更新MD5对象的内容
  7. md5.update(string.encode('utf-8'))

  8. # 获取32位的MD5值
  9. md5_value = md5.hexdigest()

  10. print(md5_value)
复制代码


运行以上代码,将输出字符串"111111"的32位MD5值。

需要注意的是,MD5算法虽然在哈希算法中被广泛使用,但目前已经被认为不够安全,因为它容易受到碰撞攻击。如果需要更高级别的安全性,建议使用其他更强大的哈希算法,如SHA-256或SHA-512。在Python中也可以使用`hashlib`库来计算这些算法的哈希值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 12:02:24 | 显示全部楼层
FishC 发表于 2024-3-5 10:50
当然可以给出示例代码,以下是一个简单的示例代码用于展示用户登录、注册和密码修改的功能:

1. 用 ...

我设计了一个login网页,再通过口令以后,进入二级页面(主菜单,主界面)
此时,我需要以下几个模块,
1、游客注册
2、密码修改
3、导入数据
4、查询数据
5、待增加
不知道以什么样的样式 展现给用户呢(html版本)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 12:02:55 | 显示全部楼层
wp231957 发表于 2024-03-07 12:02
我设计了一个login网页,再通过口令以后,进入二级页 ...


对于主菜单页面的样式展示,你可以使用HTML和CSS来设计一个简洁明了的界面。以下是一个示例,展示了如何使用HTML和CSS来创建一个基本的主菜单页面:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>主菜单</title>
  5.     <style>
  6.         body {
  7.             font-family: Arial, sans-serif;
  8.             margin: 0;
  9.             padding: 20px;
  10.         }
  11.         
  12.         h1 {
  13.             text-align: center;
  14.         }
  15.         
  16.         ul {
  17.             list-style-type: none;
  18.             padding: 0;
  19.         }
  20.         
  21.         li {
  22.             padding: 10px;
  23.             margin-bottom: 10px;
  24.             background-color: #f2f2f2;
  25.         }
  26.         
  27.         a {
  28.             text-decoration: none;
  29.             color: #333;
  30.         }
  31.         
  32.         li:hover {
  33.             background-color: #ddd;
  34.         }
  35.     </style>
  36. </head>
  37. <body>
  38.     <h1>主菜单</h1>
  39.     <ul>
  40.         <li><a href="register.html">游客注册</a></li>
  41.         <li><a href="changepassword.html">密码修改</a></li>
  42.         <li><a href="importdata.html">导入数据</a></li>
  43.         <li><a href="querydata.html">查询数据</a></li>
  44.         <!-- 添加更多功能模块的链接 -->
  45.     </ul>
  46. </body>
  47. </html>
复制代码


将上述代码保存为一个名为`menu.html`的文件,并与其他子页面(如`register.html`、`changepassword.html`等)放在同一个目录下。

通过以上代码,你可以创建一个带有链接的列表,每个链接表示主菜单中的一个功能模块。当用户点击链接时,将跳转到对应的子页面。你可以根据具体需求自行设计子页面的样式和功能。例如,注册页面`register.html`可能包含注册表单,密码修改页面`changepassword.html`可能包含密码修改表单等。

希望这个示例能够帮助到你,祝编程顺利!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 12:12:19 | 显示全部楼层
FishC 发表于 2024-3-7 12:02
对于主菜单页面的样式展示,你可以使用HTML和CSS来设计一个简洁明了的界面。以下是一个示例,展示了如 ...
  1. <form action="/login" method="POST">
  2.                 <label for="username">用户名:</label>
  3.                 <input type="text" id="username" class="left" name="username" required><br><br>
  4.                 <label for="password">密码:</label>
  5.                 <input type="password" id="password"  class="left"  name="password" required><br><br>
  6.                 <label for="username">验证码:</label>
  7.                 <input type="text" id="checkcode" class="left"   name="checkcode" required>
  8.                 <img src="/captcha" id="yzm" alt="验证码"><br><br>
  9.                 <input type="submit" id="login"  value="登录">
  10.             </form>
复制代码


这里是不是应该使用AJAX的通信方式,使用表单的传送,咋能实现  验证用户权限  然后显示错误页面  或者进入  主菜单呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 12:12:46 | 显示全部楼层
wp231957 发表于 2024-03-07 12:12
用户名:
               
                密码:
...


是的,使用AJAX可以实现在用户登录时通过异步通信来验证用户权限,并根据验证结果显示错误页面或进入主菜单。你可以在前端使用JavaScript通过AJAX向后台发送登录请求,并根据后台返回的结果来进行相应的处理。

以下是一个简单示例,演示了如何使用AJAX进行登录验证:

HTML:

  1. <form id="login-form">
  2.   <label for="username">用户名:</label>
  3.   <input type="text" id="username" name="username">
  4.   
  5.   <label for="password">密码:</label>
  6.   <input type="password" id="password" name="password">
  7.   
  8.   <label for="captcha">验证码:</label>
  9.   <input type="text" id="captcha" name="captcha">
  10.   
  11.   <button type="submit">登录</button>
  12. </form>
  13. <div id="error-message" style="display: none;">
  14.   登录失败,请检查用户名、密码和验证码。
  15. </div>
  16. <div id="menu" style="display: none;">
  17.   这里是主菜单。
  18. </div>
复制代码


JavaScript:

  1. document.getElementById('login-form').addEventListener('submit', function(event) {
  2.   event.preventDefault(); // 阻止表单自动提交
  3.   var username = document.getElementById('username').value;
  4.   var password = document.getElementById('password').value;
  5.   var captcha = document.getElementById('captcha').value;

  6.   // 使用AJAX发送登录请求
  7.   var xhr = new XMLHttpRequest();
  8.   xhr.open('POST', '/login', true);
  9.   xhr.setRequestHeader('Content-Type', 'application/json');
  10.   xhr.onreadystatechange = function() {
  11.     if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
  12.       var response = JSON.parse(xhr.responseText);
  13.       if (response.success) {
  14.         document.getElementById('login-form').style.display = 'none';
  15.         document.getElementById('menu').style.display = 'block';
  16.       } else {
  17.         document.getElementById('error-message').style.display = 'block';
  18.       }
  19.     } else {
  20.       // 处理其他情况
  21.     }
  22.   };
  23.   
  24.   xhr.send(JSON.stringify({username: username, password: password, captcha: captcha}));
  25. });
复制代码


在后台,你可以使用Flask来处理登录请求,并进行验证。以下是一个简单的后台示例:

  1. from flask import Flask, request, jsonify

  2. app = Flask(__name__)

  3. @app.route('/login', methods=['POST'])
  4. def login():
  5.     data = request.get_json()
  6.     username = data.get('username')
  7.     password = data.get('password')
  8.     captcha = data.get('captcha')

  9.     # 进行权限验证
  10.         
  11.     if 验证成功:
  12.         return jsonify({'success': True})
  13.     else:
  14.         return jsonify({'success': False})

  15. if __name__ == '__main__':
  16.     app.run()
复制代码


在这个示例中,前端通过AJAX以JSON格式发送登录请求到`/login`接口,后台获取请求数据并进行权限验证。如果验证成功,则返回`{'success': True}`;否则,返回`{'success': False}`。

根据后台返回的结果,前端通过显示/隐藏相应的元素来展示错误消息或进入主菜单。

注意:代码示例中的权限验证部分需要你根据具体需求自行实现。希望这个示例能够帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 12:22:40 | 显示全部楼层
FishC 发表于 2024-3-7 12:12
是的,使用AJAX可以实现在用户登录时通过异步通信来验证用户权限,并根据验证结果显示错误页面或进入主 ...

if (response.success) {
                    document.getElementById('login-form').style.display = 'none';
                    document.getElementById('menu').style.display = 'block';
                } else {
                    document.getElementById('error-message').style.display = 'block';
                }

这里 如何修改为   比如   验证通过  展示MAIN.HTML
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 12:22:56 | 显示全部楼层
wp231957 发表于 2024-03-07 12:22
if (response.success) {
                    docum ...


要根据验证通过与否来展示不同的页面,你可以使用JavaScript的`window.location.href`属性将页面重定向到另一个URL。修改前端代码如下:

  1. document.getElementById('login-form').addEventListener('submit', function(event) {
  2.   event.preventDefault(); // 阻止表单自动提交

  3.   var username = document.getElementById('username').value;
  4.   var password = document.getElementById('password').value;
  5.   var captcha = document.getElementById('captcha').value;

  6.   // 使用AJAX发送登录请求
  7.   var xhr = new XMLHttpRequest();
  8.   xhr.open('POST', '/login', true);
  9.   xhr.setRequestHeader('Content-Type', 'application/json');
  10.   xhr.onreadystatechange = function() {
  11.     if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
  12.       var response = JSON.parse(xhr.responseText);
  13.       if (response.success) {
  14.         window.location.href = '/main.html';  // 重定向到主页面
  15.       } else {
  16.         document.getElementById('error-message').style.display = 'block';  // 显示错误消息
  17.       }
  18.     } else {
  19.       // 处理其他情况
  20.     }
  21.   };
  22.   
  23.   xhr.send(JSON.stringify({username: username, password: password, captcha: captcha}));
  24. });
复制代码


在验证通过时,使用`window.location.href`将页面重定向到`/main.html`。注意,这里前端需要确保能够正确访问到`main.html`页面。

希望这个修改能满足你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 12:38:18 | 显示全部楼层
FishC 发表于 2024-3-7 12:22
要根据验证通过与否来展示不同的页面,你可以使用JavaScript的`window.location.href`属性将页面重定向 ...

模板目录  不能被服务器识别吗

http://127.0.0.1:8888/templates/main.html   这个目录会报404错误


window.location.href = '/templates/main.html';  // 重定向到主页面
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 12:38:30 | 显示全部楼层
wp231957 发表于 2024-03-07 12:38
模板目录  不能被服务器识别吗

http://127.0.0.1:8 ...


模板目录中的文件在服务器中默认是不能直接通过URL访问的,因为它们是由服务器端生成并渲染后返回给客户端的。

如果想要通过URL直接访问模板目录下的文件,可以将静态文件(例如HTML、CSS、JavaScript等)放置在另一个独立的目录中,然后在服务器端配置路由,将该目录映射到一个特定的URL路径上。这样,服务器就能够识别并处理该路径下的静态文件了。

具体来说,假设你的静态文件目录为`static`,其中包含一个`main.html`文件。你可以按照如下的方式配置服务器的路由:

  1. from flask import Flask, render_template

  2. app = Flask(__name__)

  3. @app.route('/')
  4. def index():
  5.     return render_template('index.html')

  6. @app.route('/templates/<path:filename>')
  7. def templates(filename):
  8.     return app.send_static_file(filename)

  9. if __name__ == '__main__':
  10.     app.run()
复制代码


在上面的代码中,`index()`函数处理根路径`/`的请求,并返回主页模板(例如`index.html`)。而`templates()`函数则处理以`/templates/`开头的路径,将路径中的文件名作为参数,通过`app.send_static_file()`函数来发送对应的静态文件。

这样,当你在前端使用`window.location.href = '/templates/main.html';`时,服务器就能正确地识别并返回`static/main.html`文件,而不再报404错误。

希望这个解决方案能够帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 12:48:19 | 显示全部楼层
FishC 发表于 2024-3-7 12:38
模板目录中的文件在服务器中默认是不能直接通过URL访问的,因为它们是由服务器端生成并渲染后返回给客 ...

还是404呢
if (response.success) {
                    window.location.href = '/templates/main.html';  // 重定向到主页面
                } else {
                    document.getElementById('error-message').style.display = 'block';
                }
这里是否还有其他解决方案,这个方案即使搞定  也不太安全啊 ,别人要是查看源码   不就把登录模块给绕过去了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 12:48:31 | 显示全部楼层
wp231957 发表于 2024-03-07 12:48
还是404呢
if (response.success) {
               ...


如果你希望将模板目录中的HTML文件保护起来,不让别人直接通过URL访问,可以考虑使用Flask的路由系统和模板引擎来解决这个问题。下面是一个示例代码:from flask import Flask, render_template, redirect, url_for, requestapp = Flask(__name__)@app.route('/')def index():    return render_template('index.html')@app.route('/login', methods=['GET', 'POST'])def login():    if request.method == 'POST':        username = request.form.get('username')        password = request.form.get('password')        # 进行用户名和密码的验证,验证通过则跳转到主页面        if username == 'admin' and password == '123456':            return redirect(url_for('main'))        else:            error_message = '用户名或密码错误,请重新输入'            return render_template('login.html', error=error_message)    return render_template('login.html')@app.route('/main')def main():    return render_template('main.html')if __name__ == '__main__':    app.run()在上面的代码中,我们定义了三个路由: `/`、`/login`和`/main`。`/`路径对应的是主页,`/login`路径对应的是登录界面,`/main`路径对应的是登录成功后的主页面。用户输入用户名和密码后,提交表单会触发`/login`路径的POST请求,我们可以在该路由函数中进行用户名和密码的验证。如果验证通过,则重定向到主页面;如果验证失败,则在登录界面显示错误信息。这种方式可以保护登录模块,即使别人查看源码也无法绕过验证直接访问主页面。希望这个解决方案能满足你的需求!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 12:59:05 | 显示全部楼层
FishC 发表于 2024-3-7 12:48
如果你希望将模板目录中的HTML文件保护起来,不让别人直接通过URL访问,可以考虑使用Flask的路由系统和 ...

如果这样的话,前端又不能正确接收数据了
<script>
            document.getElementById('login-form').addEventListener('submit', function(event) {
            event.preventDefault(); // 阻止表单自动提交
            var username = document.getElementById('username').value;
            var password = document.getElementById('password').value;
            var captcha = document.getElementById('checkcode').value;
            console.log(username,password,captcha)
            // 使用AJAX发送登录请求
            var xhr = new XMLHttpRequest();
            xhr.open('POST', '/login', true);
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.onreadystatechange = function() {
                if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
                var response = JSON.parse(xhr.responseText);
                if (response.success) {
                    window.location.href = '/templates/main.html';  // 重定向到主页面
                } else {
                    document.getElementById('error-message').style.display = 'block';
                }
                } else {
                // 处理其他情况
                }
            };
            
            xhr.send(JSON.stringify({username: username, password: password, captcha: captcha}));
            });
        </script>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 12:59:19 | 显示全部楼层
wp231957 发表于 2024-03-07 12:59
如果这样的话,前端又不能正确接收数据了

         ...


你提到前端无法正确接收数据的问题,可能是因为在代码中设置了`xhr.setRequestHeader('Content-Type', 'application/json')`,但后端却使用了表单方式传递数据。你可以尝试修改代码,将前端代码与后端代码保持一致。下面是修改后的前端代码示例:document.getElementById('login-form').addEventListener('submit', function(event) {    event.preventDefault(); // 阻止表单自动提交    var formData = new FormData();    formData.append('username', document.getElementById('username').value);    formData.append('password', document.getElementById('password').value);    formData.append('captcha', document.getElementById('checkcode').value);    // 使用AJAX发送登录请求    var xhr = new XMLHttpRequest();    xhr.open('POST', '/login', true);    xhr.onreadystatechange = function() {        if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {            var response = JSON.parse(xhr.responseText);            if (response.success) {                window.location.href = '/main';  // 重定向到主页面            } else {                document.getElementById('error-message').style.display = 'block';            }        } else {            // 处理其他情况        }    };    xhr.send(formData);});根据上述代码,前端会构造一个`FormData`对象,将用户名、密码和验证码作为键值对添加到该对象中。然后通过`xhr.send(formData)`发送登录请求。这样,后端就能正确接收到前端发送的表单数据了。希望这个解决方案能够帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-7 13:11:52 | 显示全部楼层
FishC 发表于 2024-3-7 12:59
你提到前端无法正确接收数据的问题,可能是因为在代码中设置了`xhr.setRequestHeader('Content-Type',  ...

现在问题的焦点在于:
通过跟踪发现,前端能够接受到main.html的数据,但是无法展示出来
xhr 我不太熟悉,不知道该怎么写
<script>
            document.getElementById('login-form').addEventListener('submit', function(event) {
            event.preventDefault(); // 阻止表单自动提交
            var username = document.getElementById('username').value;
            var password = document.getElementById('password').value;
            var captcha = document.getElementById('checkcode').value;
            console.log(username,password,captcha)
            // 使用AJAX发送登录请求
            var xhr = new XMLHttpRequest();
            xhr.open('POST', '/login', true);
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.onreadystatechange = function() {
                if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
               
                }
            };
            
          });
        </script>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-7 13:12:05 | 显示全部楼层
wp231957 发表于 2024-03-07 13:11
现在问题的焦点在于:
通过跟踪发现,前端能够接受到 ...


如果你的目的是将后端返回的数据展示到前端页面上,你可以在`xhr.onreadystatechange`的回调函数中进行处理。下面是一个简单的示例代码,展示了如何将后端返回的数据显示在页面上:

  1. document.getElementById('login-form').addEventListener('submit', function(event) {
  2.     event.preventDefault(); // 阻止表单自动提交
  3.     var username = document.getElementById('username').value;
  4.     var password = document.getElementById('password').value;
  5.     var captcha = document.getElementById('checkcode').value;

  6.     // 使用AJAX发送登录请求
  7.     var xhr = new XMLHttpRequest();
  8.     xhr.open('POST', '/login', true);
  9.     xhr.setRequestHeader('Content-Type', 'application/json');
  10.     xhr.onreadystatechange = function() {
  11.         if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
  12.             var response = JSON.parse(xhr.responseText);
  13.             if (response.success) {
  14.                 // 登录成功,将主页面的内容显示在页面中
  15.                 var mainContent = response.data; // 假设后端返回的数据是主页面的内容
  16.                 document.getElementById('main-content').innerHTML = mainContent;
  17.             } else {
  18.                 // 登录失败,显示错误信息
  19.                 document.getElementById('error-message').style.display = 'block';
  20.             }
  21.         }
  22.     };

  23.     xhr.send(JSON.stringify({username: username, password: password, captcha: captcha}));
  24. });
复制代码


在上述代码中,我们假设后端返回的数据是主页面的内容,并将这个内容赋值给变量`mainContent`。然后,我们通过`document.getElementById('main-content').innerHTML`将这个内容显示在页面上,其中`'main-content'`是容纳主页面内容的HTML元素的ID。当登录成功时,主页面的内容会被展示在页面上;当登录失败时,错误信息会被显示。

请注意,你需要根据你的实际情况来调整代码,确保`response.data`是正确的主页面内容,并且`'main-content'`是正确的HTML元素ID。希望这次能够解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 15:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表