Add box api loginqr

Brightcells 8 years ago
parent
commit
41c58ec3f7
12 changed files with 124 additions and 2 deletions
  1. 5 0
      api/urls.py
  2. 0 0
      box/__init__.py
  3. 4 0
      box/admin.py
  4. 0 0
      box/migrations/__init__.py
  5. 4 0
      box/models.py
  6. 4 0
      box/tests.py
  7. 27 0
      box/views.py
  8. 62 0
      page/templates/page/login_qrcode.html
  9. 14 0
      page/views.py
  10. 1 1
      pai2/settings.py
  11. 2 0
      pai2/urls.py
  12. 1 1
      requirements.txt

+ 5 - 0
api/urls.py

@@ -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
box/__init__.py


+ 4 - 0
box/admin.py

@@ -0,0 +1,4 @@
1
+from django.contrib import admin
2
+
3
+
4
+# Register your models here.

+ 0 - 0
box/migrations/__init__.py


+ 4 - 0
box/models.py

@@ -0,0 +1,4 @@
1
+from django.db import models
2
+
3
+
4
+# Create your models here.

+ 4 - 0
box/tests.py

@@ -0,0 +1,4 @@
1
+from django.test import TestCase
2
+
3
+
4
+# Create your tests here.

+ 27 - 0
box/views.py

@@ -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)

+ 62 - 0
page/templates/page/login_qrcode.html

@@ -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>

+ 14 - 0
page/views.py

@@ -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
+    })

+ 1 - 1
pai2/settings.py

@@ -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',

+ 2 - 0
pai2/urls.py

@@ -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 += [

+ 1 - 1
requirements.txt

@@ -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