@@ -4,6 +4,7 @@ from django.conf.urls import url |
||
4 | 4 |
|
5 | 5 |
from account import views as account_views |
6 | 6 |
from account import tourguide_views |
7 |
+from box import views as box_views |
|
7 | 8 |
from geo import views as geo_views |
8 | 9 |
from group import views as group_views |
9 | 10 |
from group import (groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupadmin_views, |
@@ -195,3 +196,7 @@ urlpatterns += [ |
||
195 | 196 |
urlpatterns += [ |
196 | 197 |
url(r'^mini/userinfo$', mini_views.get_userinfo_api, name='get_userinfo_api'), # 获取用户信息 |
197 | 198 |
] |
199 |
+ |
|
200 |
+urlpatterns += [ |
|
201 |
+ url(r'^box/loginqr$', box_views.login_qrcode_api, name='login_qrcode_api'), # 二维码登录 |
|
202 |
+] |
@@ -0,0 +1,4 @@ |
||
1 |
+from django.contrib import admin |
|
2 |
+ |
|
3 |
+ |
|
4 |
+# Register your models here. |
@@ -0,0 +1,4 @@ |
||
1 |
+from django.db import models |
|
2 |
+ |
|
3 |
+ |
|
4 |
+# Create your models here. |
@@ -0,0 +1,4 @@ |
||
1 |
+from django.test import TestCase |
|
2 |
+ |
|
3 |
+ |
|
4 |
+# Create your tests here. |
@@ -0,0 +1,27 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from logit import logit |
|
4 |
+ |
|
5 |
+from account.models import UserInfo |
|
6 |
+from utils.error.errno_utils import LensmanStatusCode |
|
7 |
+from utils.error.response_utils import response |
|
8 |
+from utils.redis.connect import r |
|
9 |
+ |
|
10 |
+ |
|
11 |
+@logit |
|
12 |
+def login_qrcode_api(request): |
|
13 |
+ unionid = request.POST.get('unionid', '') |
|
14 |
+ token = request.POST.get('token', '') |
|
15 |
+ |
|
16 |
+ if not r.token_exists(unionid, token): |
|
17 |
+ return response(LensmanStatusCode.LENSMAN_NOT_FOUND) |
|
18 |
+ |
|
19 |
+ try: |
|
20 |
+ user = UserInfo.objects.get(unionid=unionid, islensman=True, status=True) |
|
21 |
+ except UserInfo.DoesNotExist: |
|
22 |
+ return response(LensmanStatusCode.LENSMAN_NOT_FOUND) |
|
23 |
+ |
|
24 |
+ if user.user_status != UserInfo.ACTIVATED: |
|
25 |
+ return response(LensmanStatusCode.LENSMAN_NOT_ACTIVATED) |
|
26 |
+ |
|
27 |
+ return response(200, 'Lensman Login Success', u'摄影师登录成功', user.data) |
@@ -0,0 +1,62 @@ |
||
1 |
+{% load staticfiles %} |
|
2 |
+ |
|
3 |
+<!DOCTYPE html> |
|
4 |
+<html lang="zh-CN"> |
|
5 |
+ <head> |
|
6 |
+ <meta charset="utf-8"> |
|
7 |
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
|
8 |
+ <meta name="format-detection" content="telephone=no,email=no,address=no"> |
|
9 |
+ <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> |
|
10 |
+ <title>摄影师授权</title> |
|
11 |
+ |
|
12 |
+ <link href="https://res.wx.qq.com/open/libs/weui/0.4.3/weui.min.css" rel="stylesheet" type="text/css" /> |
|
13 |
+ |
|
14 |
+ <style> |
|
15 |
+ input:required:invalid { |
|
16 |
+ color: #E64340; |
|
17 |
+ } |
|
18 |
+ input:required:valid { |
|
19 |
+ color: rgb(0, 0, 0); |
|
20 |
+ } |
|
21 |
+ .hidden { |
|
22 |
+ display: none; |
|
23 |
+ } |
|
24 |
+ .qr { |
|
25 |
+ position: fixed; |
|
26 |
+ left: 50%; |
|
27 |
+ top: 50%; |
|
28 |
+ margin-left: -100px; |
|
29 |
+ margin-top: -100px; |
|
30 |
+ } |
|
31 |
+ </style> |
|
32 |
+ </head> |
|
33 |
+ <body> |
|
34 |
+ <div class="container" > |
|
35 |
+ <img id="qr_logo" class="hidden" src="{% static 'pai2/img/paiai_96_96.png' %}"> |
|
36 |
+ <div id="qr" class="qr"></div> |
|
37 |
+ </div> |
|
38 |
+ |
|
39 |
+ <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> |
|
40 |
+ <script src="https://cdn.bootcss.com/lrsjng.jquery-qrcode/0.14.0/jquery-qrcode.min.js"></script> |
|
41 |
+ <script> |
|
42 |
+ $("#qr").empty().qrcode({ |
|
43 |
+ render: 'image', |
|
44 |
+ mode: 4, |
|
45 |
+ image: $("#qr_logo")[0], |
|
46 |
+ text: '{{ data }}' |
|
47 |
+ }); |
|
48 |
+ </script> |
|
49 |
+ <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> |
|
50 |
+ <script type="text/javascript" src="{% static 'pai2/js/jswe.js' %}?v=1"></script> |
|
51 |
+ <script> |
|
52 |
+ V.initWxData({ |
|
53 |
+ imgUrl: "http://pai.ai/static/pai2/img/paiai_96_96.png", |
|
54 |
+ link: 'http://api.pai.ai/wx_oauth2?redirect_url=http://pai.ai/page/lensman&scope=snsapi_base', |
|
55 |
+ desc: "摄影师授权", |
|
56 |
+ title: "摄影师授权", |
|
57 |
+ timeLine: "" |
|
58 |
+ }, true); |
|
59 |
+ V.hideOptionMenu(); |
|
60 |
+ </script> |
|
61 |
+ </body> |
|
62 |
+</html> |
@@ -1,8 +1,11 @@ |
||
1 | 1 |
# -*- coding: utf-8 -*- |
2 | 2 |
|
3 |
+import json |
|
4 |
+ |
|
3 | 5 |
from django.shortcuts import render |
4 | 6 |
|
5 | 7 |
from account.models import LensmanInfo, TourGuideInfo |
8 |
+from utils.redis.connect import r |
|
6 | 9 |
|
7 | 10 |
|
8 | 11 |
def user_agreement(request): |
@@ -43,3 +46,14 @@ def tourguide_oauth(request): |
||
43 | 46 |
'tourguide_info': tourguide and tourguide.data, |
44 | 47 |
'modified': bool((not tourguide) or (tourguide and tourguide.user_status in [TourGuideInfo.UNVERIFIED, TourGuideInfo.REFUSED])), # 是否可以更改信息 |
45 | 48 |
}) |
49 |
+ |
|
50 |
+ |
|
51 |
+def login_qrcode(request): |
|
52 |
+ unionid = request.GET.get('unionid', '') |
|
53 |
+ data = { |
|
54 |
+ 'unionid': unionid, |
|
55 |
+ 'token': r.token(unionid) |
|
56 |
+ } |
|
57 |
+ return render(request, 'page/login_qrcode.html', { |
|
58 |
+ 'data': json.dumps(data) |
|
59 |
+ }) |
@@ -46,7 +46,7 @@ INSTALLED_APPS = ( |
||
46 | 46 |
'django_q', |
47 | 47 |
'api', |
48 | 48 |
'account', |
49 |
- 'geo', |
|
49 |
+ 'box', |
|
50 | 50 |
'group', |
51 | 51 |
'message', |
52 | 52 |
'miniapp', |
@@ -81,6 +81,8 @@ urlpatterns += [ |
||
81 | 81 |
url(r'^page/price$', page_views.lensman_price, name='lensman_price'), # 摄影师照片价格和分成规则 |
82 | 82 |
|
83 | 83 |
url(r'^page/tourguide$', page_views.tourguide_oauth, name='tourguide_oauth'), # 导游授权页面 |
84 |
+ |
|
85 |
+ url(r'^page/loginqr$', page_views.login_qrcode, name='login_qrcode'), # 登录二维码页面 |
|
84 | 86 |
] |
85 | 87 |
|
86 | 88 |
urlpatterns += [ |
@@ -29,7 +29,7 @@ pysnippets==1.0.4 |
||
29 | 29 |
pywe-miniapp==1.0.0 |
30 | 30 |
pywe-oauth==1.0.3 |
31 | 31 |
pywe-response==1.0.1 |
32 |
-redis-extensions==1.0.49 |
|
32 |
+redis-extensions==1.0.50 |
|
33 | 33 |
requests==2.12.4 |
34 | 34 |
rlog==0.2 |
35 | 35 |
shortuuid==0.5.0 |