AQ-测试项目--封装axios请求2020-10-29

1.创建一个测试项目

1.1 创建项目和APP

1.创建项目和APP
django-admin startproject Books # 创建项目
python manage.py startapp app01 # 创建APP

2.在settings中注册books模型
INSTALLED_APPS = [
		'app01.apps.App01Config',
]
 注:pycharm无法联想,需要把apps文件夹设置为源根
 
3.urls.py中添加路由
urlpatterns = [
	path('books/', include('books.urls')),
]

4.books/urls.py中添加子路由
from django.urls import path
	urlpatterns = [
	]

2.配置跨域

2.1 跨域原理

  1. 首先浏览器安全策略限制js ajax跨域访问服务器

  2. 如果服务器返回的头部信息中有当前域:

     // 允许 http://localhost:8080 这个网站打开的页面中的js访问我
            Access-Control-Allow-Origin: http://localhost:8080
     // 允许携带cookie访问我
             Access-Control-Allow-Credentials: true
    

    那么, 浏览器可以让js 请求该服务器

2.2 cors设置

	1. 安装包
		pip install django-cors-headers
	2. 注册应用
		INSTALLED_APPS = [
		...
		# 添加 django-cors-headers 使其可以进行 cors 跨域
		'corsheaders'
	]
	3. 添加中间件
		MIDDLEWARE = [
		# 放在中间件第一个
		'corsheaders.middleware.CorsMiddleware',
		...
	]
	4. 设置
	# CORS跨域请求白名单设置
	CORS_ORIGIN_WHITELIST = (
		'http://127.0.0.1:8080',
		'http://localhost:8080',
	)
	CORS_ALLOW_CREDENTIALS = True # 允许携带cookie

3.登录接口

3.1 urls.py 中配置路由

 urlpatterns = [
		path('login/', views.login),
]

3.2 user/views.py 中写一个login视图函数

from django.http import JsonResponse
import json

def login(request):
		body_json = request.body.decode()
		body_dict = json.loads(body_json)
		name = body_dict.get('name')
		pwd = body_dict.get('pwd')
		if not all([name, pwd]):
			resp = {
					"code": 999,
					"msg": '信息不全'
				}
				return JsonResponse(resp)
				
		if name == 'zhangsan' and pwd == '1234':
			data = {
				"code": 0,
				"msg": '登录成功',
				"data": {
					"id": 1,
					"name": '张三',
					"age": 18
				  }
				}
			resp = JsonResponse(data)
			return resp
			
		else:
			data = {
				"code": 999,
				"msg": '用户名密码不正确'
			}
			resp = JsonResponse(data)
			return resp

3.3 测试接口

	http://127.0.0.1:8000/login/

			{
			"name":"zhangsan",
			"pwd":"1234"
			}

4.图书管理系统后端接口

4.1 books/models.py 中设置表

	from django.db import models
	
	class Books(models.Model):
		btitle = models.CharField(max_length=20)
		bpub_date = models.DateField()
		bread = models.IntegerField()
		bcomment = models.IntegerField()
		is_delete = models.BooleanField(default=False)

4.2 urls.py 中设置路由

from django.urls import path
from . import views

urlpatterns = [
	path('book/', views.BooksView.as_view()),
]

4.3 book/views.py 视图函数

from .models import Books
from rest_framework.views import View
from django.http import JsonResponse
import json


class BooksView(View):
    def get(self, request):
        books = Books.objects.filter(is_delete=False)
        book_list = books.values('id','btitle','bpub_date','bread','bcomment')
        book_list = list(book_list)
        data = {
        "code": 0,
        "msg": "success",
        "books": book_list
        }
        return JsonResponse(data)

    def post(self, request):
        body_json = request.body.decode()
        body_dict = json.loads(body_json)
        btitle = body_dict.get('btitle')
        bpub_date = body_dict.get('bpub_date')
        bread = body_dict.get('bread')
        bcomment = body_dict.get('bcomment')
        book = Books(btitle=btitle, bpub_date=bpub_date, bread=bread,
        bcomment=bcomment)
        book.save()
        return JsonResponse({"code": 0, "msg": "success"})

    def put(self, request):
        body_json = request.body.decode()
        body_dict = json.loads(body_json)
        id = body_dict.get('id')
        # 2.测试接口
        # 2.1 测试获取所有图书接口
        # 返回结果
        btitle = body_dict.get('btitle')
        bpub_date = body_di
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在uni-app中封装axios,可以让你更方便地进行网络请求axios是一个流行的基于Promise的HTTP客户端,可以在浏览器和Node.js中使用。 首先,你需要在uni-app项目中安装axios。在命令行中运行以下命令: ```shell npm install axios ``` 接下来,创建一个http.js文件,用于封装axios的配置和请求函数: ```javascript import axios from 'axios' // 创建axios实例 const instance = axios.create({ baseURL: 'http://example.com/api', // 设置请求的baseURL timeout: 5000, // 设置请求超时时间 }) // 请求拦截器 instance.interceptors.request.use( config => { // 在发送请求之前做些什么,比如添加token等 return config }, error => { // 对请求错误做些什么 return Promise.reject(error) } ) // 响应拦截器 instance.interceptors.response.use( response => { // 对响应数据做些什么 return response.data }, error => { // 对响应错误做些什么 return Promise.reject(error) } ) export default instance ``` 在上面的代码中,我们创建了一个axios实例,并设置了baseURL和timeout。然后,我们通过拦截器对请求进行处理,可以在请求发送前和响应返回后做一些额外的处理,比如添加token、处理错误等。 现在,你可以在项目的任何地方使用这个封装好的axios实例进行网络请求。例如: ```javascript import http from '@/utils/http' http.get('/users') .then(data => { console.log(data) }) .catch(err => { console.error(err) }) ``` 这样,你就可以在uni-app中使用封装好的axios进行网络请求了。当然,你还可以根据自己的需求对axios进行更多的配置和封装。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值