DevEco + Django 前后端数据库连接 实验五

1.涉及相关知识点

2.实验内容

2.1 实验目标

结合之前的实验三,这次完成登录部分的样例。当登录时输入的用户名和密码与后端数据库中一样时,将内容显示在输入框下面。

2.2 相关代码

前端

<!--login.hml-->
<div class="container">
    <div class="title">
        <text class="txt">Welcome</text>
    </div>
    <div class="middle">
        <div class="row1">
            <div class="input-block">
                <input id="username" class="input" type="text" maxlength="10" placeholder="用户名"
                        onchange="inputAccount" ontranslate="translate"/>
            </div>
        </div>
        <div class="row2">
            <div class="input-block">
                <input id="password" class="input" type="password" maxlength="10" placeholder="密码"
                       onchange="inputPassword"/>
            </div>
        </div>
        <div class="login">
            <button class="btn" onclick="onClick">立即登录</button>
        </div>
        <div class="regist">
            <text class="txt1">忘记密码?</text>
            <text class="txt2">|</text>
            <text class="txt2" onclick="docRegist">立即处理</text>
        </div>
        <div class="back">
            <text>{{winfo}}</text>
        </div>
        </div>
</div>
//login.css
.container{
    display:flex;
    flex-direction: column;
    align-items: center;
    width: 440px;
    height:800px;
}
.title{
    margin-top: 150px;
}
.txt{
    font-size:60px;
    color:blueviolet;
}
.up{
    flex-direction: column;
    height:200px;
}
.middle{
    flex-direction: column;
    margin-top: 60px;
}
.form-text{
    font-size:17px;
}
.button1{
    width:150px;
    height:70px;
    box-shadow: 1 2px 4px 0 rgba(0,0,0,2);
    font-size:30px;
    background-color: #0ea9ff;
    color:#ffffff;
    margin-top: 170px;
    margin-top: 40px;
}
.button2{
    width:150px;
    height:70px;
    box-shadow:1 2px 4px 0 rgba(0,0,0,2);
    font-size:30px;
    background-color: #0ea9ff;
    color:#ffffff;
    margin-top: 110px;
    margin-top: 10px;
}
.input-form{
    width:100%;
    justify-content: center;
    margin-top: 10px;
    margin-bottom: 10px;
}
.form-text{
    font-size:20px;
}
.row1{
    width:350px;
    margin-top: 15px;
    flex-direction: row;
}
.row2{
    width:350px;
    margin-top: 15px;
    flex-direction: row;
}
.label{
    font-size:14px;
    width:120px;
    text-align: right;
    margin-left: 15px;
}
.input-block{
    width:100%;
}
.input{
    border-bottom: 1px solid rgba(0,0,0,0.2);
    border-right:1px solid rgba(0,0,0,0.2);
    margin-left: 10%; /*使居中*/
    width:80%;
    height:50px;
    font-size:20px;
    placeholder-color: rgb(160,160,160);
    font-weight: 200;
}
.password-tip{
    font-size:30px;   
}
.sex{
    font-size:10px;
    margin-right:10px;
}
.favorite{
    font-size:10px;
}
.button{
    margin-top: 70px;
    width:150px;
    background-color:#17A98E;
}
.btn{
    background-color:#3399FF;
    margin-top: 10%;
    width:70%;
    margin-left: 15%;
    height:50px;
    font-weight:600;
    text-align: center;
    font-size:22px;
}
.login{
    height:70px;
}
.regist{
    flex-direction: row;
    width:50%;
    margin-left:25%;
}
.txt1{
    font-size: 15px;
    text-align: center;
}
.txt2{
    font-size: 15px;
    margin-left: 5px;
}

// login.js
import router from '@system.router';
import fetch from '@system.fetch';
import qs from 'qs';
export default {
    data: {
//        fit:"cover",
        winfo:"",
    },
//    docRegist(){
//        router.push({
//            uri:'pages/registUser/registUser',//指定要跳转的页面
//        })
//    },
    inputAccount(e){
        this.username = e.value;
    },
    inputPassword(e){
        this.password = e.value;
    },
    onClick(){
        //发起网络请求
        fetch.fetch({
            url:`http://127.0.0.1:8000/train/login/`,
            data: qs.stringify({'username':111,'password':222}),
            //验证,转为字符串发给后台,与自己输入的用户名和密码进行匹配
            responseType:"json",
            method:"POST",

            success:(resp)=>{
                this.winfo = resp.data;//令获取到的数据赋给
                console.log("返回到数据:"+this.winfo)//打印出数据
//                if(this.winfo=="验证成功"){
//                    router.push({
//                        uri:'pages/nav/nav'
//                    })
//                }
            }
        })
    }
}

后端

class login(APIView):
    def post(self, request):
        username1 = request.data.get("username"); # 跟前端对应
        password1 = request.data.get("password");
        # "username"和"password"是前端发送给后端的数据 data: qs.stringify所对应的键
        print(username1);
        cur = con.cursor() # 创建游标

        sql = "select * from login3 where name =%s"
        # 执行查询操作
        # 这里=%s千万不能分开
        values = (username1)

        try:
            # cur.excute(sql,args)
            # excute()执行sql
            # 用python内置的方法可以对sql语句传入的参数进行校验,在一定程度上屏蔽掉sql注入,提升了SQL的安全性
            # 类似于其他语言社区query函数,excute是python中的执行查询函数
            if cur.execute(sql,values):
                # 上面if是 如果if后面的执行成功了
                # con.commit()表示提交确认
                # 想让insert 语句 插入数据库里面去需要加上这个
                con.commit()
                # 获取所有符合查询要求的记录列表
                # cur在里面起到
                # .fetchall() 返回多个元组,即返回多个记录(rows),查的是参数sql,即login3这个表
                # 元组是有序且不可修改的集合,用圆括号
                results = cur.fetchall()
                for row in results:
                    # 获取到的列表对应列
                    Pusername1 = row[1]
                    Ppassword1 = row[2]
                    print(Pusername1)
                    print(Ppassword1)
                if password1 == Ppassword1:
                    print("账号密码验证跳过")
                    return HttpResponse(Pusername1+','+Ppassword1)
                    # return HttpResponse('验证成功')
            else:
                    print('查无此人')
        except pymysql.Error as e: # e就是except
            print("查无此人" + str(e))
            return HttpResponse("请求失败") # 返回到前端显示的内容

数据库

在这里插入图片描述

2.3 操作流程

这次没有使用models.py,没有进行表迁移,而是用封装好的方式,直接手动创建。
这样的方式不需要在settings.py里面配置和连接相关的信息,但是要在views.py中使用
pymysql.connect()创建连接

2.4 执行结果

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue和Django都是非常流行的Web开发框架,Vue是一个JavaScript框架,用于构建单页面应用程序,而Django是一个Python框架,用于构建Web应用程序。在这里,我将向您展示如何使用Vue和Django构建一个完整的Web应用程序。 首先,您需要决定如何组织您的项目。您可以将Vue作为前端,Django作为后端,或者将它们结合在一起,使用Django作为API,并使用Vue作为前端框架来调用API。 在这里,我们将使用Vue和Django结合在一起,使用Django作为API,Vue作为前端框架。这意味着我们将使用Django来处理所有的后端逻辑,并使用Vue来渲染前端页面并调用Django API。 步骤如下: 1. 安装和配置Django 首先,您需要安装Django。您可以使用pip在命令行中运行以下命令来安装Django: ``` pip install django ``` 安装完成后,您需要创建一个新的Django项目。在命令行中输入以下命令: ``` django-admin startproject myproject ``` 这将创建一个名为myproject的新Django项目。 2. 创建Django应用程序 在Django中,应用程序是一个可重用的组件,用于执行特定任务。在我们的项目中,我们将创建一个名为api的Django应用程序,用于处理所有的API请求。 在命令行中,进入myproject目录,并运行以下命令: ``` python manage.py startapp api ``` 这将创建一个名为api的新Django应用程序。 3. 配置Django路由 在Django中,路由用于指定应用程序如何响应特定的URL。在我们的项目中,我们将使用Django路由来指定如何处理API请求。 在api应用程序的目录中,创建一个名为urls.py的新文件,并添加以下代码: ```python from django.urls import path from . import views urlpatterns = [ path('api/', views.api_view, name='api_view'), ] ``` 这将创建一个新的路由,并将其指向api_view视图函数。我们将在下一步中创建这个视图函数。 4. 创建Django视图函数 在Django中,视图函数用于处理HTTP请求并返回HTTP响应。在我们的项目中,我们将创建一个名为api_view的视图函数,用于处理API请求。 在api应用程序的views.py文件中,添加以下代码: ```python from django.http import JsonResponse def api_view(request): data = { 'message': 'Hello, world!' } return JsonResponse(data) ``` 这将创建一个简单的视图函数,返回一个包含“Hello, world!”消息的JSON响应。 5. 配置Django设置 在Django中,设置用于配置应用程序的特定行为。在我们的项目中,我们需要配置Django以允许跨域请求,并将api应用程序添加到INSTALLED_APPS设置中。 在myproject目录中,打开settings.py文件,并添加以下代码: ```python INSTALLED_APPS = [ # ... 'api', ] CORS_ORIGIN_ALLOW_ALL = True ``` 这将启用跨域请求,并将api应用程序添加到INSTALLED_APPS设置中。 6. 创建Vue应用程序 接下来,我们将创建Vue应用程序。在命令行中,运行以下命令: ``` vue create myapp ``` 这将创建一个名为myapp的新Vue应用程序。 7. 配置Vue应用程序 在Vue应用程序的src目录中,打开main.js文件,并添加以下代码: ```javascript import Vue from 'vue' import App from './App.vue' import axios from 'axios' Vue.config.productionTip = false Vue.prototype.$http = axios.create({ baseURL: 'http://localhost:8000' }) new Vue({ render: h => h(App), }).$mount('#app') ``` 这将配置Vue应用程序,使其使用Axios库调用Django API。请注意,我们使用了http://localhost:8000作为API的基本URL,这是Django的默认端口。 8. 创建Vue组件 在Vue应用程序的src目录中,创建一个名为HelloWorld.vue的新文件,并添加以下代码: ```html <template> <div> <h1>{{ message }}</h1> </div> </template> <script> export default { data() { return { message: '' } }, mounted() { this.$http.get('/api/') .then(response => { this.message = response.data.message }) } } </script> ``` 这将创建一个Vue组件,用于显示从Django API返回的消息。 9. 渲染Vue应用程序 在Vue应用程序的src目录中,打开App.vue文件,并添加以下代码: ```html <template> <div> <HelloWorld /> </div> </template> <script> import HelloWorld from './components/HelloWorld.vue' export default { name: 'App', components: { HelloWorld } } </script> ``` 这将渲染Vue应用程序,并在页面上显示HelloWorld组件。 10. 运行项目 现在,您已经完成了Vue和Django的配置。在命令行中,进入myproject目录,并运行以下命令: ``` python manage.py runserver ``` 这将启动Django服务器。在另一个命令行窗口中,进入myapp目录,并运行以下命令: ``` npm run serve ``` 这将启动Vue开发服务器。现在,您可以在浏览器中访问http://localhost:8080,看到来自Django API的“Hello, world!”消息。 至此,您已经成功地使用Vue和Django构建了一个完整的Web应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值