from chaoyuecun.settings import APPID,SECRET
import urllib.request
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
from .serializers import WxUsersAreaModelSerializer
import json
from .models import WxUsers
import hashlib,time
from datetime import datetime
# Create your views here.
class WxLoginView(APIView):
"""微信用户无感登录"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
code=request.GET.get('code')
# print(request.GET)
if code:
# 用前端发过来的code把openid和session_key兑换过来
url="https://api.weixin.qq.com/sns/jscode2session?appid="+APPID+"&secret="+SECRET+"&js_code="+code+"&grant_type=authorization_code"
res=urllib.request.urlopen(url)
content=res.read().decode()
obj=json.loads(content)
openid=obj["openid"]
# print(openid)
if openid:
#生成token,加密
i=int(time.time())
s=str(i)
sha= hashlib.sha1()
sha.update((openid+s).encode('utf-8'))
token=sha.hexdigest()
# print(token)
#查看以前此用户是否登陆过
wxuser = WxUsers.objects.filter(open_id=openid).first()
if wxuser:
#如果登录过,就将token值更新
wxuser.token = token
#更新最后登录时间
wxuser.last_login_time=datetime.now()
wxuser.save()
else:
#如果没登录过,就生成用户,并且赋值token
wxuser=WxUsers()
wxuser.open_id=openid
wxuser.token=token
wxuser.save()
# 将token信息返回
res={'status':'200','data':{'code':'登录成功','token':token}}
else:
res={'status':'405','data':{'code':'登录失败','msg':'未收到openid'}}
else:
res = {'status': '404', 'data':{'code':'登录失败','msg':'未收到code'}}
# return Response(json.dumps(res, ensure_ascii=False))
return Response(res)
class GetUserInfoView(APIView):
"""获取用户信息"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
token=request._request.GET.get('token','')
if token:
# 根据token寻找对应的微信用户
wxuser=WxUsers.objects.filter(token=token).first()
if wxuser:
#获取用户昵称、用户头像地址、用户市、用户性别
nickName=request._request.GET.get('nickName','')
avatarUrl=request._request.GET.get('avatarUrl','')
gender=request._request.GET.get('gender','')
city=request._request.GET.get('city','')
#因为gender有可能是0,0在python里属于False,所以不能用来and验证
if nickName and avatarUrl and city:
wxuser.nickName=nickName
wxuser.avatarUrl=avatarUrl
wxuser.gender=gender
wxuser.city=city
wxuser.save()
res={'status': '200', 'data': {'code': '获取用户信息成功', 'msg': ''}}
else:
res = {'status': '405', 'data': {'code': '获取用户信息失败', 'msg': '用户信息不全'}}
else:
res = {'status': '403', 'data': {'code':'获取用户信息失败','msg':'token不正确'}}
else:
res = {'status': '404', 'data': {'code':'获取用户信息失败','msg':'未收到token'}}
return Response(res)
class GetAreaView(APIView):
"""
获取用户经纬度
"""
def get(self,request):
token=request._request.GET.get('token','')
longitude = request._request.GET.get('longitude', '')
latitude = request._request.GET.get('latitude', '')
if token:
wxuser=WxUsers.objects.filter(token=token).first()
if wxuser:
if longitude and latitude:
wxuser.longitude=longitude
wxuser.latitude=latitude
wxuser.save()
res = {'status': '200', 'data': {'code': '获取用户经纬度成功', 'msg': ''}}
else:
res= {'status': '404', 'data':{'code':'获取用户经纬度失败','msg':'未收到用户经纬度'}}
else:
res = {'status': '403', 'data': {'code': '获取用户经纬度失败', 'msg': '用户token错误'}}
else:
res = {'status': '405', 'data': {'code': '获取用户经纬度失败', 'msg': '未收到用户token'}}
return Response(res)
class GetAllWxUserLocationView(APIView):
"""获取所有微信用户经纬度"""
def get(self,request):
allwxuserlocation_list=WxUsers.objects.all()
re=WxUsersAreaModelSerializer(allwxuserlocation_list,many=True)
return Response(re.data)
因为并没有很多api,所以路由就不分别放在不同的app下了
#……
from users.views import WxLoginView,GetUserInfoView,GetAreaView,GetAllWxUserLocationView
urlpatterns = [
#……
path('login/',WxLoginView.as_view()),
path('getuserinfo/',GetUserInfoView.as_view()),
path('getarea/',GetAreaView.as_view()),
path('getalllocation/',GetAllWxUserLocationView.as_view())
]
<template>
<div>
{{title}}
<button open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取用户信息权限 </button>
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
//用户api测试
//无感登录
Login(){
wx.login({
success(res) {
if (res.code) {
// 发起网络请求
wx.request({
url: 'http://127.0.0.1:8000/login/',
data: {
code: res.code
},
success(res) {
console.log(res.data)
if(res.data.status==="200"){
wx.setStorageSync('token', res.data.data.token)
}
console.log('token:',wx.getStorageSync('token') || [])
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
},
//获取用户信息,传到后端
getSetting1(){
wx.getSetting({
success: function(res){
if (res.authSetting['scope.userInfo']) {
wx.getUserInfo({
success: function(res) {
console.log(res.userInfo)
//用户已经授权过
console.log('用户已经授权过')
//向后端发送用户信息(昵称、性别、头像地址、所在城市)
var token=wx.getStorageSync('token') || []
wx.request({
url: 'http://127.0.0.1:8000/getuserinfo/',
data:{
token:token,
nickName:res.userInfo.nickName,
city:res.userInfo.city,
avatarUrl:res.userInfo.avatarUrl,
gender:res.userInfo.gender
},
success(res) {
console.log(res.data)
}
})
//……………………………………………………………………
}
})
}else{
console.log('用户还未授权过')
//没授权则自动关闭小程序
}
}
})
},
//获取地理位置
getPermission(){
wx.getSetting({
success(res) {
console.log(res.authSetting)
if(res.authSetting['scope.userLocation']===true){
console.log('已经授权获取地理位置')
wx.getLocation({
type: 'wgs84',
success(res) {
console.log(res)
var token=wx.getStorageSync('token') || []
wx.request({
url:'http://127.0.0.1:8000/getarea/',
data:{
token:token,
latitude:res.latitude,
longitude:res.longitude
},
success(res){
console.log(res.data)
}
})
}
})
}
else{
console.log('未授权获取地理位置')
wx.authorize({
// 如果没授权过,弹出授权框
scope: 'scope.userLocation',
success(){
// 用户点击了授权
console.log('授权成功!')
},
fail(){
console.log('拒绝授权')
}
})
}
}
})
},
//获取所有用户地理位置
getAll(){
wx.request({
url:'http://127.0.0.1:8000/getalllocation/',
success(res){
console.log(res.data)
}
})
},
},
onShow(){
// this.getPermission()
},
created () {
// this.Login()
// this.getSetting1()
// this.getAll()
}
}
</script>
<style scoped>
</style>
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
from users.models import WxUsers
from .models import Wish,News,Images
from .serializers import WishModelSerializer,NewsModelSerializer,ImagesModelSerializer
from datetime import datetime
# Create your views here.
class MakeNewWishView(APIView):
"""发布愿望"""
renderer_classes = [JSONRenderer] # 渲染器
def post(self,request):
token = request._request.POST.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
timestamp=request._request.POST.get('timestamp', '')
wish=request._request.POST.get('wish', '')
if timestamp and wish:
t = datetime.fromtimestamp(int(timestamp) / 1000)
newwish=Wish()
newwish.wxuser=wxuser
newwish.content=wish
newwish.end_time=t
newwish.save()
res = {'status': '200', 'data': {'code': '发布成功', 'msg': ''}}
else:
res = {'status': '405', 'data': {'code': '发布失败', 'msg': '提交数据不足'}}
else:
res = {'status': '403', 'data': {'code': '发布失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '发布失败', 'msg': '未收到token'}}
return Response(res)
from wish.views import MakeNewWishView
urlpatterns = [
#……
path('makenewwish/',MakeNewWishView.as_view())
]
1.引入vant-ui的时间选择器组件
2.在index.vue中:
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
<van-datetime-picker type="datetime" :loading="loading" :value="currentDate1" :min-date="minDate" @confirm="onChange"/>
愿望:<input type="text" v-model="wish">
<button @click="Makewish">提交</button>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页',
loading: false,
currentDate1: new Date(2019, 4, 1).getTime(),
minDate: new Date(2019, 3, 25).getTime(),
timestamp:0,
wish:''
}
},
methods: {
onChange ({mp}) {
console.log(mp.detail)
this.timestamp=mp.detail
},
Makewish(){
wx.request({
url:'http://127.0.0.1:8000/makenewwish/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
wish:this.wish,
timestamp:this.timestamp
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
}
},
created () {
}
}
</script>
<style scoped>
</style>
3.测试过程:运行项目,然后选择时间,然后点击【确认】按钮,然后再编辑愿望,再点击【提交】按钮
4.效果图:
5.多生产几条新愿望,以备后面使用。
注意:这里获取的愿望,都是状态在‘进行中’的愿望。
class GetAllWishView(APIView):
"""获取所有在进行中的愿望"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
wish_list=Wish.objects.filter(status='0')
re=WishModelSerializer(wish_list,many=True)
return Response(re.data)
#……
from wish.views import GetAllWishView
urlpatterns = [
#……
path('getallwish/',GetAllWishView.as_view())
]
1.index.vue:
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
getAllwish(){
wx.request({
url: 'http://127.0.0.1:8000/getallwish/',
success(res) {
console.log(res.data)
}
})
}
},
created () {
this.getAllwish()
}
}
</script>
<style scoped>
</style>
2.运行项目,效果图
class GetNewsListView(APIView):
"""获取新闻列表"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
news_list=News.objects.all().order_by('-add_time')
re=NewsModelSerializer(news_list,many=True)
return Response(re.data)
class GetNewsDetailView(APIView):
"""获取单条新闻"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self, request):
id=request._request.GET.get('id','')
if id:
news=News.objects.filter(id=id).first()
if news:
re=NewsModelSerializer(news)
return Response(re.data)
else:
res = {'status': '403', 'data': {'code': '获取失败', 'msg': '没有此条新闻'}}
else:
res = {'status': '404', 'data': {'code': '获取失败', 'msg': '未收到新闻id'}}
return Response(res)
class GetNewsImagesView(APIView):
"""获取新闻图片"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self, request):
id=request._request.GET.get('id','')
if id:
news=News.objects.filter(id=id).first()
if news:
images_list=Images.objects.filter(news=news)
re=ImagesModelSerializer(images_list,many=True)
return Response(re.data)
else:
res = {'status': '403', 'data': {'code': '获取失败', 'msg': '没有此条新闻'}}
else:
res = {'status': '404', 'data': {'code': '获取失败', 'msg': '未收到新闻id'}}
return Response(res)
#……
from wish.views import MakeNewWishView,GetAllWishView,GetNewsDetailView,GetNewsImagesView,GetNewsListView
urlpatterns = [
#……
path('getnewsdetail/',GetNewsDetailView.as_view()),
path('getnewsImages/',GetNewsImagesView.as_view()),
path('getnewslist/',GetNewsListView.as_view())
]
1.index.vue内代中:
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
getNewsDetail(){
wx.request({
url: 'http://127.0.0.1:8000/getnewsdetail/',
data:{
id:1
},
success(res) {
console.log(res.data)
}
})
},
getNewsImages(){
wx.request({
url: 'http://127.0.0.1:8000/getnewsImages/',
data:{
id:1
},
success(res) {
console.log(res.data)
}
})
},
getNewsList(){
wx.request({
url: 'http://127.0.0.1:8000/getnewslist/',
success(res) {
console.log(res.data)
}
})
}
},
created () {
this.getNewsDetail()
this.getNewsImages()
this.getNewsList()
}
}
</script>
<style scoped>
</style>
2.效果图
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer
from users.models import WxUsers
from wish.models import Wish
from .models import Message,Pick,Share,Notice
from .serializers import MessageModelSerializer,PickModelSerializer,ShareModelSerializer,NoticeModelSerializer
# Create your views here.
class MakeMessageView(APIView):
"""发布愿望的评论,获取愿望评论列表"""
renderer_classes = [JSONRenderer] # 渲染器
def post(self,request):
token = request._request.POST.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
wish_id=request._request.POST.get('wish_id', '')
content=request._request.POST.get('content', '')
if wish_id and content:
wish=Wish.objects.filter(id=wish_id).first()
message=Message()
message.user_send=wxuser
message.user_receive=wish.wxuser
message.wish=wish
message.content=content
message.save()
res = {'status': '200', 'data': {'code': '发布成功', 'msg': ''}}
else:
res = {'status': '405', 'data': {'code': '发布失败', 'msg': '提交数据不足'}}
else:
res = {'status': '403', 'data': {'code': '发布失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '发布失败', 'msg': '未收到token'}}
return Response(res)
def get(self,request):
"""获取用户收到所有消息"""
token = request._request.GET.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
message_list=Message.objects.filter(user_receive=wxuser).order_by('-add_time')
re=MessageModelSerializer(message_list,many=True)
return Response(re.data)
else:
res = {'status': '403', 'data': {'code': '获取失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '获取失败', 'msg': '未收到token'}}
return Response(res)
class ReadMessageView(APIView):
"""查看和删除评论"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
token = request._request.GET.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
message_id=request._request.GET.get('message_id', '')
if message_id:
message=Message.objects.filter(id=message_id).first()
if message:
message.is_read=True
message.save()
res = {'status': '200', 'data': {'code': '获取成功', 'msg': '指定id评论为已读'}}
else:
res = {'status': '406', 'data': {'code': '获取失败', 'msg': '未找到指定id对应评论'}}
else:
res = {'status': '405', 'data': {'code': '获取失败', 'msg': '未收到评论id'}}
else:
res = {'status': '403', 'data': {'code': '获取失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '获取失败', 'msg': '未收到token'}}
return Response(res)
def post(self,request):
token = request._request.POST.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
message_id=request._request.POST.get('message_id', '')
if message_id:
message=Message.objects.filter(id=message_id).delete()
res = {'status': '200', 'data': {'code': '操作成功', 'msg': '指定id评论为已删除'}}
else:
res = {'status': '405', 'data': {'code': '操作失败', 'msg': '未收到评论id'}}
else:
res = {'status': '403', 'data': {'code': '操作失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '操作失败', 'msg': '未收到token'}}
return Response(res)
#……
from user_operation.views import MakeMessageView,ReadMessageView
urlpatterns = [
#……
path('makemessage/',MakeMessageView.as_view()),
path('readmessage/',ReadMessageView.as_view())
]
1.在index.vue中:
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
MakeMessage(){
wx.request({
url:'http://127.0.0.1:8000/makemessage/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
wish_id:1,
content:'2222这是一条有可能友好又有可能不友好的评论'
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
},
GetMessage(){
wx.request({
url:'http://127.0.0.1:8000/makemessage/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c'
},
success(res){
console.log(res.data)
}
})
},
ReadMessage(){
wx.request({
url:'http://127.0.0.1:8000/readmessage/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
message_id:1
},
success(res){
console.log(res.data)
}
})
},
DelMessage(){
wx.request({
url:'http://127.0.0.1:8000/readmessage/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
message_id:2
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
}
},
created () {
// this.MakeMessage()
// this.GetMessage()
this.ReadMessage()
this.DelMessage()
}
}
</script>
<style scoped>
</style>
2.效果图:
class PickWishView(APIView):
"""get获取点赞数,post点赞/取消指定愿望点赞"""
renderer_classes = [JSONRenderer] # 渲染器
def post(self,request):
token = request._request.POST.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
wish_id=request._request.POST.get('wish_id', '')
if wish_id:
wish=Wish.objects.filter(id=wish_id).first()
if wish:
pick=Pick.objects.filter(wish=wish,user=wxuser).first()
if pick:
#如果有点赞记录,则删除
pick.delete()
else:
new_pick=Pick()
new_pick.user=wxuser
new_pick.wish=wish
new_pick.save()
res = {'status': '200', 'data': {'code': '操作成功', 'msg': ''}}
else:
res = {'status': '406', 'data': {'code': '操作失败', 'msg': '未找到指定id对应的愿望'}}
else:
res = {'status': '405', 'data': {'code': '操作失败', 'msg': '未收到愿望id'}}
else:
res = {'status': '403', 'data': {'code': '操作失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '操作失败', 'msg': '未收到token'}}
return Response(res)
def get(self,request):
wish_id=request._request.GET.get('wish_id', '')
if wish_id:
wish=Wish.objects.filter(id=wish_id).first()
if wish:
nums=Pick.objects.filter(wish=wish).count()
res = {'status': '200', 'data': {'code': '获取成功', 'nums': nums}}
else:
res = {'status': '406', 'data': {'code': '获取失败', 'msg': '未找到指定id对应的愿望'}}
else:
res = {'status': '405', 'data': {'code': '获取失败', 'msg': '未收到愿望id'}}
return Response(res)
class ShareWishView(APIView):
"""get获取愿望被分享数,post分享指定愿望"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
wish_id=request._request.GET.get('wish_id', '')
if wish_id:
wish=Wish.objects.filter(id=wish_id).first()
if wish:
nums=Share.objects.filter(wish=wish).count()
res = {'status': '200', 'data': {'code': '获取成功', 'nums': nums}}
else:
res = {'status': '406', 'data': {'code': '获取失败', 'msg': '未找到指定id对应的愿望'}}
else:
res = {'status': '405', 'data': {'code': '获取失败', 'msg': '未收到愿望id'}}
return Response(res)
def post(self,request):
token = request._request.POST.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
wish_id=request._request.POST.get('wish_id', '')
if wish_id:
wish=Wish.objects.filter(id=wish_id).first()
if wish:
new_share=Share()
new_share.user=wxuser
new_share.wish=wish
new_share.save()
res = {'status': '200', 'data': {'code': '操作成功', 'msg': ''}}
else:
res = {'status': '406', 'data': {'code': '操作失败', 'msg': '未找到指定id对应的愿望'}}
else:
res = {'status': '405', 'data': {'code': '操作失败', 'msg': '未收到愿望id'}}
else:
res = {'status': '403', 'data': {'code': '操作失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '操作失败', 'msg': '未收到token'}}
return Response(res)
#……
from user_operation.views import PickWishView,ShareWishView
urlpatterns = [
#……
path('pickwish/',PickWishView.as_view()),
path('sharewish/',ShareWishView.as_view())
]
1.在index.vue中
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
PickWish(){
wx.request({
url:'http://127.0.0.1:8000/pickwish/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
wish_id:1
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
},
GetWishPickNum(){
wx.request({
url:'http://127.0.0.1:8000/pickwish/',
data:{
wish_id:1
},
success(res){
console.log(res.data)
}
})
},
ShareWish(){
wx.request({
url:'http://127.0.0.1:8000/sharewish/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
wish_id:1
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
},
GetWishShareNum(){
wx.request({
url:'http://127.0.0.1:8000/sharewish/',
data:{
wish_id:1
},
success(res){
console.log(res.data)
}
})
}
},
created () {
// this.PickWish()
// this.GetWishPickNum()
this.ShareWish()
this.GetWishShareNum()
}
}
</script>
<style scoped>
</style>
2.效果图:
class GetNoticeView(APIView):
'''get获取最新公告'''
renderer_classes = [JSONRenderer] # 渲染器
def get(self, request):
notice=Notice.objects.all().last()
re=NoticeModelSerializer(notice)
return Response(re.data)
#……
from user_operation.views import GetNoticeView
urlpatterns = [
# ……
path('getnotice/',GetNoticeView.as_view())
]
1.在index.vue中
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
getNotice(){
wx.request({
url:'http://127.0.0.1:8000/getnotice/',
success(res){
console.log(res.data)
}
})
}
},
created () {
this.getNotice()
}
}
</script>
<style scoped>
</style>
2.效果图:只会显示最新的 公告
from wish.serializers import WishModelSerializer
class MyWishView(APIView):
"""
get 获取我的愿望(包括正在进行的、放弃的,达成的)
post flag=1 实现愿望,flag=2 放弃愿望 ,flag=3删除愿望
"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
token = request._request.GET.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
wish_list=Wish.objects.filter(wxuser=wxuser).all()
re=WishModelSerializer(wish_list,many=True)
return Response(re.data)
else:
res = {'status': '403', 'data': {'code': '获取失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '获取失败', 'msg': '未收到token'}}
return Response(res)
def post(self,request):
token = request._request.POST.get('token', '')
if token:
# 根据token寻找对应的微信用户
wxuser = WxUsers.objects.filter(token=token).first()
if wxuser:
wish_id=request._request.POST.get('wish_id', '')
if wish_id:
wish=Wish.objects.filter(id=wish_id).first()
if wish:
flag=request._request.POST.get('flag', '')
if flag=='1':
wish.status='1'
wish.save()
res = {'status': '200', 'data': {'code': '操作成功', 'msg': ''}}
elif flag=='2':
wish.status = '2'
wish.save()
res = {'status': '200', 'data': {'code': '操作成功', 'msg': ''}}
elif flag=='3':
wish.delete()
res = {'status': '200', 'data': {'code': '操作成功', 'msg': ''}}
else:
res = {'status': '407', 'data': {'code': '操作失败', 'msg': '未收到flag'}}
else:
res = {'status': '406', 'data': {'code': '操作失败', 'msg': '未找到指定id对应的愿望'}}
else:
res = {'status': '405', 'data': {'code': '操作失败', 'msg': '未收到愿望id'}}
else:
res = {'status': '403', 'data': {'code': '操作失败', 'msg': 'token不正确'}}
else:
res = {'status': '404', 'data': {'code': '操作失败', 'msg': '未收到token'}}
return Response(res)
#……
from user_operation.views import MyWishView
urlpatterns = [
# ……
path('mywish/',MyWishView.as_view())
]
1.在index.vue中:
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
//获取个人所有愿望
GetMyWish(){
wx.request({
url:'http://127.0.0.1:8000/mywish/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c'
},
success(res){
console.log(res.data)
}
})
},
//愿望实现了
BecomeWish(){
wx.request({
url:'http://127.0.0.1:8000/mywish/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
wish_id:1,
flag:1
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
},
//放弃愿望
GiveUpWish(){
wx.request({
url:'http://127.0.0.1:8000/mywish/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
wish_id:1,
flag:2
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
},
//删除愿望
DelWish(){
wx.request({
url:'http://127.0.0.1:8000/mywish/',
data:{
token:'02cfd6476d002081c0475d4644a2a53c8766205c',
wish_id:1,
flag:3
},
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method:'POST',
success(res){
console.log(res.data)
}
})
}
},
created () {
// this.GetMyWish()
// this.BecomeWish()
// this.GiveUpWish()
this.DelWish()
}
}
</script>
<style scoped>
</style>
2.效果图:
class GetWishMessageView(APIView):
"""get 获取指定愿望的评论数"""
renderer_classes = [JSONRenderer] # 渲染器
def get(self,request):
wish_id=request._request.GET.get('wish_id', '')
if wish_id:
wish=Wish.objects.filter(id=wish_id).first()
if wish:
nums=Message.objects.filter(wish=wish).count()
res = {'status': '200', 'data': {'code': '获取成功', 'nums': nums}}
else:
res = {'status': '406', 'data': {'code': '获取失败', 'msg': '未找到指定id对应的愿望'}}
else:
res = {'status': '405', 'data': {'code': '获取失败', 'msg': '未收到愿望id'}}
return Response(res)
#……
from user_operation.views importGetWishMessageView
urlpatterns = [
# ……
path('getwishmessage/',GetWishMessageView.as_view())
]
1.index.vue中:
<template>
<div>
{{title}}
<div>token:02cfd6476d002081c0475d4644a2a53c8766205c</div>
</div>
</template>
<script>
export default {
data () {
return {
title: '第一次打开小程序的首页'
}
},
methods: {
GetWishMsgNum(){
wx.request({
url:'http://127.0.0.1:8000/getwishmessage/',
data:{
wish_id:2,
},
success(res){
console.log(res.data)
}
})
}
},
created () {
this.GetWishMsgNum()
}
}
</script>
<style scoped>
</style>
2.效果图