add register function

pull/1/head
xiaoyu 5 years ago
parent a9b5e320c0
commit 11810cd6ca
  1. 4
      fir_client/src/components/FirHeader.vue
  2. 6
      fir_client/src/components/FirLogin.vue
  3. 112
      fir_client/src/components/FirRegist.vue
  4. 2
      fir_client/src/components/FirUserProfileBase.vue
  5. 16
      fir_client/src/restful/index.js
  6. 3
      fir_ser/api/urls.py
  7. 53
      fir_ser/api/views/login.py

@ -14,12 +14,12 @@
</el-breadcrumb>
</el-col>
<el-col :span="2" :push="4">
<el-col :span="2" :push="3">
<div class="block">
<el-avatar :size="66" :src="$store.state.userinfo.head_img"></el-avatar>
</div>
</el-col>
<el-col :span="4" :push="4">
<el-col :span="4" :push="3">
<el-dropdown style="padding-top: 12px;" @command="handleCommand">
<el-button type="success" plain round>
{{$store.state.userinfo.first_name }}<i class="el-icon-arrow-down el-icon--right"></i>

@ -44,9 +44,9 @@
<el-button type="danger" @click="onSubmit">登录</el-button>
</el-form-item>
<!-- <el-form-item>-->
<!-- <el-button type="primary" @click="onRegister" plain>注册</el-button>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" @click="onRegister" plain>注册</el-button>
</el-form-item>
</el-form>

@ -24,40 +24,44 @@
<el-input v-model="form.password" prefix-icon="el-icon-lock" placeholder="密码"
show-password></el-input>
</el-form-item>
<el-form-item>
<el-input v-model="form.password2" prefix-icon="el-icon-lock" placeholder="确认密码"
show-password></el-input>
</el-form-item>
<el-form-item style="height: 40px">
<el-row style="height: 40px">
<el-col :span="16">
<el-input placeholder="请输入验证码" v-model="form.authcode" maxlength="4"></el-input>
<el-input placeholder="请输入验证码" v-model="form.authcode" maxlength="6"></el-input>
</el-col>
<el-col :span="8">
<el-image
style="margin:0px 4px;border-radius:4px;cursor:pointer;height: 40px"
:src="form.srccode"
fit="contain" @click="getsrcode">
:src="cptch.cptch_image"
fit="contain" @click="get_auth_code">
</el-image>
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-input v-model="form.phone" prefix-icon="el-icon-mobile" placeholder="手机"
maxlength="11"></el-input>
</el-form-item>
<el-form-item>
<el-row>
<el-col :span="16">
<el-input v-model="form.phonecode" prefix-icon="el-icon-mobile"
placeholder="验证码"></el-input>
</el-col>
<el-col :span="8">
<el-button type="info" @click="getphonecode" plain
style="margin:0px 4px;border-radius:4px;cursor:pointer;height: 40px">获取验证码
</el-button>
</el-col>
</el-row>
</el-form-item>
<!-- <el-form-item>-->
<!-- <el-input v-model="form.phone" prefix-icon="el-icon-mobile" placeholder="手机"-->
<!-- maxlength="11"></el-input>-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-row>-->
<!-- <el-col :span="16">-->
<!-- <el-input v-model="form.phonecode" prefix-icon="el-icon-mobile"-->
<!-- placeholder="验证码"></el-input>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-button type="info" @click="getphonecode" plain-->
<!-- style="margin:0px 4px;border-radius:4px;cursor:pointer;height: 40px">获取验证码-->
<!-- </el-button>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="danger" @click="onRegist">注册</el-button>
@ -76,6 +80,8 @@
</template>
<script>
import {loginFun, registerFun} from "../restful";
export default {
name: "FirRegist",
data() {
@ -83,27 +89,81 @@
form: {
email: '',
password: '',
password2: '',
authcode: '',
srccode: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
phonecode: '',
phone: '',
},
cptch: {"cptch_image": '', "cptch_key": '', "length": 8},
}
},
methods: {
getsrcode() {
this.form.srccode = 'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48jpeg.jpeg';
get_auth_code() {
loginFun(data => {
if (data.code == 1000) {
this.cptch = data.data;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, {
"methods": "GET",
"data": {}
});
},
getphonecode() {
},
onRegist() {
let email = this.form.email;
let password = this.form.password;
let password2 = this.form.password2;
if (this.isEmail(email)) {
alert(email, password)
let authcode = this.form.authcode;
if (authcode.length === this.cptch.length) {
if(password === password2 && password.length >= 6){
registerFun(data => {
if (data.code == 1000) {
this.$message({
message: '注册成功',
type: 'success'
});
this.$router.push({name: 'FirLogin'})
} else {
this.$message({
message: data.msg,
type: 'error'
});
this.get_auth_code();
}
}, {
"methods": "POST",
"data": {
"username": email,
"password": password,
"password2": password2,
"authcode": authcode,
"cptch_key": this.cptch.cptch_key
}
});
}else {
this.$message({
message: '密码不一致或者密码长度小于6',
type: 'warning'
});
}
} else {
this.$message({
message: '验证码有误',
type: 'warning'
});
}
} else {
this.$message({
message: '请输入正确的邮箱地址',
@ -124,6 +184,8 @@
}
,
created() {
},mounted() {
this.get_auth_code();
}
}
</script>

@ -13,7 +13,7 @@
</el-upload>
<div class="name">
<input v-model="userinfo.first_name" @focusout="update_name">
<input v-model="userinfo.first_name" maxlength="8" @focusout="update_name">
</div>
<div class="user_pro_tabs">

@ -172,6 +172,22 @@ export function loginFun(callBack, params, load = true) {
);
}
/**用户注册 */
export function registerFun(callBack, params, load = true) {
getData(
params.methods,
USERSEVER + '/register',
params.data,
data => {
callBack(data);
},
load,
true,
true
);
}
/**用户退出 */
export function logout(callBack, params, load = true) {
getData(

@ -16,7 +16,7 @@ Including another URLconf
from django.contrib import admin
from django.urls import path, re_path, include
from api.views.login import LoginView, UserInfoView
from api.views.login import LoginView, UserInfoView, RegistView
from api.views.logout import LogoutView
from api.views.apps import AppsView, AppInfoView, AppReleaseinfoView
from api.views.download import ShortDownloadView
@ -32,6 +32,7 @@ from api.views.supersign import DeveloperView, SuperSignUsedView, AppUDIDUsedVie
urlpatterns = [
# path("",include(router.urls)),
re_path("^login", LoginView.as_view()),
re_path("^register", RegistView.as_view()),
re_path("^logout", LogoutView.as_view()),
re_path("^apps$", AppsView.as_view()),
re_path("^storage$", StorageView.as_view()),

@ -83,6 +83,51 @@ class LoginView(APIView):
response.data = get_captcha()
return Response(response.dict)
class RegistView(APIView):
def generate_key(self):
return binascii.hexlify(os.urandom(32)).decode()
def post(self, request):
response = BaseResponse()
receive = request.data
username = receive.get("username", None)
is_valid = valid_captcha(receive.get("cptch_key", None), receive.get("authcode", None), username)
if is_valid:
if login_auth_failed("get", username):
password = receive.get("password")
password2 = receive.get("password2")
if password == password2:
try:
UserInfo.objects.get(username=username)
login_auth_failed("set", username)
response.msg = "邮箱已经存在,请更换其他邮箱"
response.code = 1002
except UserInfo.DoesNotExist:
user_obj = UserInfo.objects.create_user(username, email=username, password=password,first_name=username)
if user_obj:
response.msg = "注册成功"
response.code = 1000
else:
response.code = 1001
response.msg = "密码不一致"
else:
response.code = 1006
logger.error("username:%s failed too try , locked" % (username,))
response.msg = "用户注册失败次数过多,已被锁定,请1小时之后再次尝试"
else:
response.code = 1001
response.msg = "验证码有误"
return Response(response.dict)
def get(self, request):
response = BaseResponse()
response.data = get_captcha()
return Response(response.dict)
class UserInfoView(APIView):
authentication_classes = [ExpiringTokenAuthentication, ]
@ -170,7 +215,15 @@ class UserInfoView(APIView):
sms_token_obj = DownloadToken()
if sms_token_obj.verify_token(sms_token, data.get("sms_code", None)):
request.user.mobile = data.get("mobile", request.user.mobile)
try:
request.user.save()
except Exception as e:
serializer = UserInfoSerializer(request.user)
res.data = serializer.data
res.code = 1004
res.msg = "信息保存失败"
logger.error("User %s info save failed. Excepiton:%s" % (request.user,e))
return Response(res.dict)
serializer = UserInfoSerializer(request.user)
res.data = serializer.data
return Response(res.dict)

Loading…
Cancel
Save