一篇文章搞懂简单的前后端数据库连接

引言

可能很多新学习编程的小伙伴的学习路线都是单独的后端语言或者静态的前端,当想把前后端以及数据库连接起来并访问时,会遇到很多麻烦,这里举了一个小小的登录案例来说明。

前期准备

需要一个域名和服务器,能通过域名直接访问挂载到服务器上的前端代码或者后端代码
若没有这些 也没关系,一般学校都是有校园网的,在自己的电脑上打开命令提示符(cmd)输入ipconfig,得到自己电脑连接无线网的ip,这里我的ip是10.65.206.5,由于校园网的ip不是固定的,所以当重新连接时需要重新获取无线网ip
在这里插入图片描述

域名与服务器

1.当有了服务器后,会给你一个ip,可以直接通过ip访问服务器,那既然能直接访问服务器为什么需要域名呢?
主要理由:
①ip地址是一连串的数字,当有多个ip地址时很明显是不好记且容易记混的,所以这里就需要域名,例如www.baidu.com(百度的域名)很好记吧
②直接通过ip直接访问服务器受攻击可能风险高,域名可以稍微起到一些防护作用
2.那么域名是如何访问服务器的呢?
ip地址可直接访问服务器,而发送端与服务器之间有一个DNS服务器,DNS服务器可以帮我们查询到ip地址,ip地址便可直接访问服务器。如下图(图来源《图解HTTP》)
在这里插入图片描述

数据库的实现

我们需要一个登录账户和登录密码,创建表,并输入一些信息
这里以mysql与Navicat为例
在这里插入图片描述

后端

实现后端代码与数据库的连接,这里以Java为例,使用工具是idea

idea与数据库连接

idea中可直接与数据库进行连接
在这里插入图片描述

后端代码的实现

这里需要知道java与数据库之间连接的代码如何实现,以及java与前端之间数据传递的代码如何实现

/登录类/

//import net.sf.json.JSON;
//import net.sf.json.JSONObject;

import javax.jws.WebService;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.sql.*;
@WebServlet("/login")
public class Database extends HttpServlet implements Servlet{
    private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/book?serverTimezone=UTC";
    private static final String USER_NAME = "root"; //用户名,一般都是root
    private static final String PASSWORD = "123456"; //数据库密码,根据自己数据库密码进行更改
    private static final String METHOD_GET = "GET";

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //        通过http协议获取前端提交过来的数据
        Connection conn = null;
        Statement stmt = null;
        String sql;
        ResultSet rs = null;

        resp.setContentType("text/html;charset=UTF-8");
        /* 设置响应头允许ajax跨域访问 */
        resp.setHeader("Access-Control-Allow-Origin", "*");
        /* 星号表示所有的异域请求都可以接受, */
        resp.setHeader("Access-Control-Allow-Methods", "GET,POST");

        PrintWriter out = resp.getWriter();
        Writer oout = resp.getWriter();
        
        try {
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD);
            stmt = conn.createStatement();
            String user = "";
            String pwd = "";
            String success = null;
            String id = (String)req.getParameter("user");//通过容器的实现来取得通过get或者post方式提交过来的数据,这里均是get方法
            String password = (String)req.getParameter("pwd");
            System.out.println(id+password);
            sql = "select pwd from login where user = '"+id+"'"; //在数据库中查找相同id的密码
            rs = stmt.executeQuery(sql);

            while(rs.next()){
                pwd = rs.getString("pwd");
                System.out.println(pwd);
                if( pwd.equals(password)&&password!=null){//若从前端得到的密码与数据库中密码一致时返回成功
                    success = "1";
                    oout.write(success);
                }

            }
            if(success == null){
                oout.write("0");
            }

            rs.close();
            stmt.close();
            conn.close();
            out.close();

        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        } finally {

        }
    }

    @Override
    public void init(ServletConfig servletConfig) throws javax.servlet.ServletException {

    }

}

前端

前端部分需要一个简单的登录界面,这里以微信小程序为例
//在数据库中查不到时插入

login.wxml

<view class="login_wrap">
    <view class="user_id">
        账号: <input placeholder="请输入您的账号" bindinput="handleInputId" value="{{userid}}"/>
    </view>
    <view class="user_password">
        密码: <input placeholder="请输入您的密码"  bindinput="handleInputPassword" value="{{userpassword}}"/>
    </view>
    <view class="login_register">
        <button class="login" plain="{{true}}" bindtap="handleLogin">登录</button>
    </view>
</view>

login.js

Page({
  data:{
      id: '',
      password: '',
      userid: '',
      userpassword: '',
  },

  handleInputId(e){ //获取输入框中的信息,并保存到data中
    this.data.id = e.detail.value;
    //console.log(e.detail.value);
    
  },
  handleInputPassword(e){ //获取输入框中的信息,并保存到data中
    this.data.password = e.detail.value;
    //console.log( e.detail.value);
    
  },

  handleLogin(){ //点击登录时
      const id = this.data.id;
      const password = this.data.password;
      wx.request({	//向后端发送请求
          url: 'http://localhost:8080/data', //这里的地址可以填最开始查到的无线网的ip  10.65.206.5 也可以直接填localhost本机地址
          data:{
              userid: id,
              userpassword: password
          },
          success: (result)=>{
              console.log(result);
              if(result.data === "失败"){
                  wx.showToast({
                      title: '登陆失败',
                      icon: 'none',
                      duration: 2000,
                      mask: true,
                  });
                  this.setData({
                    userid:'',
                    userpassword:'',
                 })//登录失败清空输入框中的数据
              } else{
                wx.showToast({
                    title: '登陆成功',
                    icon: 'none',
                    duration: 2000,
                    mask: true,
                });
              }
              
          },
          fail: ()=>{},
          complete: ()=>{}
      });
  },
})

实现

最后一步,真机调试,使用手机连接校园网,登录数据库中已有的数据,或是错误的没有的数据,会显示登录成功与失败弹窗,登录成功后跳转到另一个页面(这里没有写跳转页面)

最后,这篇文章的代码只能做为实现整个流程的一个小demo,还有很多优化的地方,主要是为理解整个前后端以及数据库连接的整个过程。

  • 29
    点赞
  • 216
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我可以为您提供一个简单的 Django 前后端实例,并且展示如何连接数据库。 首先,在 Django 中,前端后端通常是通过模板语言来实现交互。模板语言是一种将数据和 HTML 代码结合起来的方式,可以让我们更方便地处理后端数据并渲染到前端页面中。 下面是一个简单的 Django 前后端实例: 1. 创建 Django 项目并创建一个 app: ``` $ django-admin startproject myproject $ cd myproject $ python manage.py startapp myapp ``` 2. 在 `myapp/views.py` 中编写视图函数: ```python from django.shortcuts import render def index(request): data = {'name': 'World'} return render(request, 'index.html', context=data) ``` 3. 在 `myapp/templates/index.html` 中编写 HTML 模板: ```html <!DOCTYPE html> <html> <head> <title>Hello, {{ name }}!</title> </head> <body> <h1>Hello, {{ name }}!</h1> </body> </html> ``` 4. 在 `myproject/urls.py` 中配置路由: ```python from django.urls import path from myapp.views import index urlpatterns = [ path('', index, name='index'), ] ``` 5. 运行 Django 项目并查看页面: ``` $ python manage.py runserver ``` 在浏览器中打开 `http://localhost:8000`,就可以看到我们编写的页面了。 接下来是连接数据库的部分: 1. 在 `myproject/settings.py` 中配置数据库: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', } } ``` 这里我们以 MySQL 数据库为例,配置了数据库称、用户、密码、主机和端口号。 2. 在 `myapp/models.py` 中定义模型: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) ``` 这里我们定义了一个 Book 模型,包含了书籍的标题和作者。 3. 在 `myproject/settings.py` 中添加应用程序: ```python INSTALLED_APPS = [ 'myapp', ] ``` 4. 创建迁移并应用: ``` $ python manage.py makemigrations $ python manage.py migrate ``` 这里我们使用 Django 的迁移工具来创建和应用数据库迁移,以便在数据库中创建我们定义的 Book 模型。 现在,我们就可以在视图函数中通过 ORM 操作来访问数据库了: ```python from myapp.models import Book def index(request): books = Book.objects.all() data = {'books': books} return render(request, 'index.html', context=data) ``` 在 HTML 模板中,我们可以像这样使用模型中的数据: ```html {% for book in books %} <h1>{{ book.title }}</h1> <p>{{ book.author }}</p> {% endfor %} ``` 这样,我们就完成了一个简单的 Django 前后端实例,并且展示了如何连接数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值