-
Notifications
You must be signed in to change notification settings - Fork 216
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c8ef795
commit e2675ef
Showing
9 changed files
with
267 additions
and
55 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.css" /> | ||
<div id="app"> | ||
<div class="field"> | ||
<p class="control has-icons-left has-icons-right"> | ||
<input v-model="username" class="input" type="email" placeholder="Email"> | ||
<span class="icon is-small is-left"> | ||
<i class="fas fa-envelope"></i> | ||
</span> | ||
<span class="icon is-small is-right"> | ||
<i class="fas fa-check"></i> | ||
</span> | ||
</p> | ||
</div> | ||
<div class="field"> | ||
<p class="control has-icons-left"> | ||
<input v-model="password" class="input" type="password" placeholder="Password"> | ||
<span class="icon is-small is-left"> | ||
<i class="fas fa-lock"></i> | ||
</span> | ||
</p> | ||
</div> | ||
<div class="field"> | ||
<a class="button is-danger" @click="login">Login</a> | ||
</div> | ||
</div> | ||
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script> | ||
<script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.min.js"></script> | ||
<script> | ||
var app = new Vue({ | ||
el: '#app', | ||
data: { | ||
message: 'Hello Vue!', | ||
username: '', | ||
password: '', | ||
}, | ||
mounted: function () { | ||
this.$nextTick(function () { | ||
var self = this | ||
$.ajax({ | ||
type: "GET", | ||
url: "http://localhost:8000/users/1/", | ||
dataType: 'json', | ||
headers: { | ||
"Authorization": "JWT " + window.localStorage.getItem("usertoken") | ||
}, | ||
success: function (data){ | ||
self.username = data.username | ||
alert('hello world') | ||
} | ||
}); | ||
}) | ||
}, | ||
methods: { | ||
login () { | ||
var params = { | ||
'username': this.username, | ||
'password': this.password, | ||
} | ||
$.post('http://localhost:8000/login/', params, function(data) { | ||
window.localStorage.setItem("usertoken", data.token); | ||
}) | ||
} | ||
} | ||
}) | ||
</script> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
from django.contrib import admin | ||
from django.contrib.auth import get_user_model | ||
|
||
user = get_user_model() | ||
|
||
# Register your models here. | ||
admin.site.register(user) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,47 @@ | ||
# Generated by Django 2.1.2 on 2018-11-01 03:35 | ||
# Generated by Django 2.1.2 on 2018-11-01 06:23 | ||
|
||
import django.contrib.auth.models | ||
import django.contrib.auth.validators | ||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
import django.utils.timezone | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
initial = True | ||
|
||
dependencies = [ | ||
('auth', '0009_alter_user_last_name_max_length'), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name='Address', | ||
name='UserProfile', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('is_delete', models.BooleanField(default=False, verbose_name='删除标记')), | ||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), | ||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')), | ||
('recipient_name', models.CharField(max_length=20, verbose_name='收件人')), | ||
('recipient_addr', models.CharField(max_length=256, verbose_name='收件地址')), | ||
('zip_code', models.CharField(max_length=6, verbose_name='邮政编码')), | ||
('recipient_phone', models.CharField(max_length=11, verbose_name='联系电话')), | ||
('is_default', models.BooleanField(default=False, verbose_name='是否默认')), | ||
('password', models.CharField(max_length=128, verbose_name='password')), | ||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), | ||
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), | ||
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), | ||
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), | ||
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), | ||
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), | ||
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), | ||
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), | ||
('name', models.CharField(blank=True, max_length=30, null=True, verbose_name='姓名')), | ||
('birthday', models.DateField(blank=True, null=True, verbose_name='出生年月')), | ||
('gender', models.CharField(choices=[('male', '男'), ('female', '女')], default='female', max_length=6, verbose_name='性别')), | ||
('mobile', models.CharField(blank=True, help_text='电话号码', max_length=11, null=True, verbose_name='电话')), | ||
('email', models.EmailField(blank=True, max_length=100, null=True, verbose_name='邮箱')), | ||
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), | ||
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), | ||
], | ||
options={ | ||
'db_table': 's_user_address', | ||
'verbose_name': '用户信息', | ||
'verbose_name_plural': '用户信息', | ||
}, | ||
), | ||
migrations.CreateModel( | ||
name='Passport', | ||
fields=[ | ||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||
('is_delete', models.BooleanField(default=False, verbose_name='删除标记')), | ||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), | ||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')), | ||
('username', models.CharField(max_length=20, verbose_name='用户名称')), | ||
('password', models.CharField(max_length=40, verbose_name='用户密码')), | ||
('email', models.EmailField(max_length=254, verbose_name='用户邮箱')), | ||
('is_active', models.BooleanField(default=False, verbose_name='激活状态')), | ||
managers=[ | ||
('objects', django.contrib.auth.models.UserManager()), | ||
], | ||
options={ | ||
'db_table': 's_user_account', | ||
}, | ||
), | ||
migrations.AddField( | ||
model_name='address', | ||
name='passport', | ||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.Passport', verbose_name='账户'), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,26 @@ | ||
from datetime import datetime | ||
from django.db import models | ||
from db.base_model import BaseModel | ||
from django.contrib.auth.models import AbstractUser | ||
|
||
# Create your models here. | ||
class Passport(BaseModel): | ||
'''用户模型类''' | ||
username = models.CharField(max_length=20, verbose_name='用户名称') | ||
password = models.CharField(max_length=40, verbose_name='用户密码') | ||
email = models.EmailField(verbose_name='用户邮箱') | ||
is_active = models.BooleanField(default=False, verbose_name='激活状态') | ||
class UserProfile(AbstractUser): | ||
""" | ||
用户表,新增字段如下 | ||
""" | ||
GENDER_CHOICES = ( | ||
("male", u"男"), | ||
("female", u"女") | ||
) | ||
# 用户注册时我们要新建user_profile 但是我们只有手机号 | ||
name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名") | ||
# 保存出生日期,年龄通过出生日期推算 | ||
birthday = models.DateField(null=True, blank=True, verbose_name="出生年月") | ||
gender = models.CharField(max_length=6, choices=GENDER_CHOICES, default="female", verbose_name="性别") | ||
mobile = models.CharField(null=True, blank=True, max_length=11, verbose_name="电话", help_text="电话号码") | ||
email = models.EmailField(max_length=100, null=True, blank=True, verbose_name="邮箱") | ||
|
||
class Meta: | ||
db_table = 's_user_account' | ||
verbose_name = "用户信息" | ||
verbose_name_plural = verbose_name | ||
|
||
class Address(BaseModel): | ||
'''地址模型类''' | ||
recipient_name = models.CharField(max_length=20, verbose_name='收件人') | ||
recipient_addr = models.CharField(max_length=256, verbose_name='收件地址') | ||
zip_code = models.CharField(max_length=6, verbose_name='邮政编码') | ||
recipient_phone = models.CharField(max_length=11, verbose_name='联系电话') | ||
is_default = models.BooleanField(default=False, verbose_name='是否默认') | ||
passport = models.ForeignKey('Passport', verbose_name='账户', on_delete=models.CASCADE) | ||
|
||
class Meta: | ||
db_table = 's_user_address' | ||
def __str__(self): | ||
return self.username |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
from rest_framework.validators import UniqueValidator | ||
import re | ||
from datetime import datetime, timedelta | ||
from drfbookstore.settings import REGEX_MOBILE | ||
from rest_framework import serializers | ||
from django.contrib.auth import get_user_model | ||
|
||
User = get_user_model() | ||
|
||
class UserDetailSerializer(serializers.ModelSerializer): | ||
class Meta: | ||
model = User | ||
fields = ("username", "gender", "birthday", "email", "mobile") | ||
|
||
class UserRegSerializer(serializers.ModelSerializer): | ||
username = serializers.CharField(label="用户名", help_text="用户名", required=True, allow_blank=False, | ||
validators=[UniqueValidator(queryset=User.objects.all(), message="用户已经存在")]) | ||
password = serializers.CharField( | ||
style={'input_type': 'password'}, help_text="密码", label="密码", write_only=True, | ||
) | ||
|
||
# 不加字段名的验证器作用于所有字段之上。attrs是字段validate之后返回的总的dict | ||
def validate(self, attrs): | ||
attrs["mobile"] = attrs["username"] | ||
return attrs | ||
|
||
class Meta: | ||
model = User | ||
fields = ("username", "mobile", "password") | ||
|
Oops, something went wrong.