把post请求中的数据存入数据库+优化代码

第一个版本
views.py

from django.shortcuts import render
from  django.http import  HttpResponse
# Create your views here.
from lists.models import Item
'''def home_page(request):
    return  HttpResponse('<html><title>To-Do lists</title></html>')'''
from django.shortcuts import render
'''def home_page(request):
    if request.method=='POST':
        return HttpResponse(request.POST['item_text'])
    return render(request,'home.html')'''
'''def home_page(request):
    return  render(request,'home.html',{'new_item_text':request.POST.get('item_text',''),})
'''
def home_page(request):
    item=Item()
    item.text=request.POST.get('item_text','')
    item.save()
    return  render(request,'home.html',{'new_item_text':item.text})

tests.py

'''from django.test import TestCase

# Create your tests here.
class Smokeclass(TestCase):
    def test_bad_maths(self):
        self.assertEquals(1+1,3)'''''
from  django.urls import  resolve
from  django.test import  TestCase
from lists.views import  home_page
from django.http import  HttpRequest
from lists.models import Item
class HomePageTest(TestCase):
    def test_root_url_resolve_to_home_page_view(self):
        found=resolve('/')
        # resolve函数是django内部使用的函数,用于解析url,
        # 并且将其映射到相应的视图函数上,检查网站根路径时"/",
        # 是否能找到home_page函数
        self.assertEquals(found.func,home_page)
    def test_home_page_returns_correct_html(self):
        request=HttpRequest()
        # 创建httprequest对象,用户在浏览器中请求网页时
        # django看到的就是httprequest对象

        response=home_page(request)
        # 把对象传给home_page视图

        html=response.content.decode('utf8')
        # 提取content,得到结果是原始的字节,即发个用户
        # 浏览器的0和1,随后调用.decode(),把原始字节
        # 转换成发给用户的html字符串

        self.assertTrue(html.startswith('<html>'))

        self.assertIn('<title>To-Do lists</title>',html)

        self.assertTrue(html.endswith('</html>'))
    def test_home_page_returns_correct_html_chonggou(self):
        response=self.client.get('/')
        html = response.content.decode('utf8')
        # 提取content,得到结果是原始的字节,即发个用户
        # 浏览器的0和1,随后调用.decode(),把原始字节
        # 转换成发给用户的html字符串

        self.assertTrue(html.startswith('<html>'))

        self.assertIn('<title>To-Do lists</title>', html)

        self.assertTrue(html.endswith('</html>'))
        self.assertTemplateUsed(response,'home.html')
    def test_user_home_template(self):
        response=self.client.get('/')
        self.assertTemplateUsed(response,'home.html')
    def test_can_save_a_POST_request(self):
        response=self.client.post('/',data={'item_text':'a new list item'})

        self.assertEquals(Item.objects.count(), 1)
        new_item=Item.objects.first()
        self.assertEquals(new_item.text,'a new list item')


        self.assertIn('a new list item',response.content.decode())
        self.assertTemplateUsed(response, 'home.html')
class ItemModelTest(TestCase):
    def test_saving_and_retrieving_items(self):
        first_item=Item()
        first_item.text="the first list item"
        first_item.save()
        second_item = Item()
        second_item.text = "the second list item"
        second_item.save()
        saved_items=Item.objects.all()
        self.assertEquals(saved_items.count(),2)
        first_saved_item=saved_items[0]
        second_saved_item=saved_items[1]
        self.assertEquals(first_saved_item.text,'the first list item')
        self.assertEquals(second_saved_item.text, 'the second list item')





在这里插入图片描述
优化代码
在这里插入图片描述
views,py

from django.shortcuts import render
from  django.http import  HttpResponse
# Create your views here.
from lists.models import Item
'''def home_page(request):
    return  HttpResponse('<html><title>To-Do lists</title></html>')'''
from django.shortcuts import render
'''def home_page(request):
    if request.method=='POST':
        return HttpResponse(request.POST['item_text'])
    return render(request,'home.html')'''
'''def home_page(request):
    return  render(request,'home.html',{'new_item_text':request.POST.get('item_text',''),})
'''
'''def home_page(request):
    item=Item()
    item.text=request.POST.get('item_text','')
    item.save()
    return  render(request,'home.html',{'new_item_text':item.text})'''
def home_page(request):
    if request.method=='POST':
        new_item_text=request.POST['item_text']
        Item.objects.create(text=new_item_text)
    else:
        new_item_text=''
    return render(request, 'home.html', {'new_item_text': new_item_text,})

test.py

'''from django.test import TestCase

# Create your tests here.
class Smokeclass(TestCase):
    def test_bad_maths(self):
        self.assertEquals(1+1,3)'''''
from  django.urls import  resolve
from  django.test import  TestCase
from lists.views import  home_page
from django.http import  HttpRequest
from lists.models import Item
class HomePageTest(TestCase):
    def test_root_url_resolve_to_home_page_view(self):
        found=resolve('/')
        # resolve函数是django内部使用的函数,用于解析url,
        # 并且将其映射到相应的视图函数上,检查网站根路径时"/",
        # 是否能找到home_page函数
        self.assertEquals(found.func,home_page)
    def test_home_page_returns_correct_html(self):
        request=HttpRequest()
        # 创建httprequest对象,用户在浏览器中请求网页时
        # django看到的就是httprequest对象

        response=home_page(request)
        # 把对象传给home_page视图

        html=response.content.decode('utf8')
        # 提取content,得到结果是原始的字节,即发个用户
        # 浏览器的0和1,随后调用.decode(),把原始字节
        # 转换成发给用户的html字符串

        self.assertTrue(html.startswith('<html>'))

        self.assertIn('<title>To-Do lists</title>',html)

        self.assertTrue(html.endswith('</html>'))
    def test_home_page_returns_correct_html_chonggou(self):
        response=self.client.get('/')
        html = response.content.decode('utf8')
        # 提取content,得到结果是原始的字节,即发个用户
        # 浏览器的0和1,随后调用.decode(),把原始字节
        # 转换成发给用户的html字符串

        self.assertTrue(html.startswith('<html>'))

        self.assertIn('<title>To-Do lists</title>', html)

        self.assertTrue(html.endswith('</html>'))
        self.assertTemplateUsed(response,'home.html')
    def test_user_home_template(self):
        response=self.client.get('/')
        self.assertTemplateUsed(response,'home.html')
    def test_can_save_a_POST_request(self):
        response=self.client.post('/',data={'item_text':'a new list item'})

        self.assertEquals(Item.objects.count(), 1)
        new_item=Item.objects.first()
        self.assertEquals(new_item.text,'a new list item')


        self.assertIn('a new list item',response.content.decode())
        self.assertTemplateUsed(response, 'home.html')
class ItemModelTest(TestCase):
    def test_saving_and_retrieving_items(self):
        first_item=Item()
        first_item.text="the first list item"
        first_item.save()
        second_item = Item()
        second_item.text = "the second list item"
        second_item.save()
        saved_items=Item.objects.all()
        self.assertEquals(saved_items.count(),2)
        first_saved_item=saved_items[0]
        second_saved_item=saved_items[1]
        self.assertEquals(first_saved_item.text,'the first list item')
        self.assertEquals(second_saved_item.text, 'the second list item')

class Home_Page_Test(TestCase):
    def test_only_saves_items_when_necessary(self):
        self.client.get('/')
        self.assertEquals(Item.objects.count(),0)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在后端搭建一个接口,用于接收前端传来的json数据存入数据库。以下是一个示例的Node.js代码: ``` const express = require('express'); const mysql = require('mysql'); const bodyParser = require('body-parser'); const app = express(); const port = 3000; // 解析json请求体 app.use(bodyParser.json()); // 连接数据库 const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test_db' }); connection.connect(); // 接收post请求 app.post('/saveJsonData', (req, res) => { const jsonData = req.body; // 将json数据转换成字符串 const jsonString = JSON.stringify(jsonData); // 存入数据库 const sql = `INSERT INTO json_data (data) VALUES ('${jsonString}')`; connection.query(sql, (error, results) => { if (error) throw error; console.log('Json data saved successfully!'); res.send('Json data saved successfully!'); }); }); app.listen(port, () => { console.log(`Server started at http://localhost:${port}`); }); ``` 在前端,可以使用axios库来发送post请求,并将json数据作为请求体发送到后端接口。 ``` <template> <div> <h1>Vue App</h1> <button @click="saveJsonData">Save Json Data</button> </div> </template> <script> import axios from 'axios'; export default { methods: { saveJsonData() { const jsonData = { name: 'John', age: 30 }; axios.post('http://localhost:3000/saveJsonData', jsonData) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); } } } </script> ``` 当点击“Save Json Data”按钮时,会发送post请求到后端接口,并将json数据存入数据库。需要注意的是,这只是一个简单的示例代码,实际情况还需要添加一些错误处理和安全性措施。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值