Merge branch 'develop'

This commit is contained in:
wrmswindmill 2018-08-21 01:08:46 +08:00
commit c63d7f1cf1
10 changed files with 212 additions and 51 deletions

View File

@ -62,12 +62,25 @@ class ShowAnnotationView(View):
# 怎么获取组id还没有写 # 怎么获取组id还没有写
def get_group_annotation(self,file_id,line_num,user_id): def get_group_annotation(self,file_id,line_num,user_id):
# 首先获取当前组的所有用户id # 首先获取当前组的所有用户id
user_ids = [] # 根据到当前的id获取到group username list
users = self.get_group_userids(user_id)
# user_ids = []
# 然后调用 # 然后调用
commit_id = self.get_current_commitid_by_fileid(file_id) commit_id = self.get_current_commitid_by_fileid(file_id)
annotations = Annotation.objects.filter(file_id=file_id, linenum=line_num,user_id__in=user_ids,is_latest=1,commit_id=commit_id) annotations = Annotation.objects.filter(file_id=file_id, linenum=line_num,user__in=users,is_latest=1,commit_id=commit_id)
return annotations return annotations
def get_educoder_group_userlist_by_userid(self,userid):
pass
def get_group_userids(self,user_id):
educoder_userid = User.objects.get(id=user_id).educoder_userid
# 调用educoder的接口返回对应的username list
usernames = self.get_educoder_group_userlist_by_userid(educoder_userid)
users = User.objects.filter(email__in=usernames)
return users
def post(self, request): def post(self, request):
""" """
获取某一行代码所有的注释 获取某一行代码所有的注释

View File

@ -7,6 +7,9 @@ from .models import User
class LoginForm(forms.Form): class LoginForm(forms.Form):
email = forms.CharField(required=True) email = forms.CharField(required=True)
password = forms.CharField(required=True, min_length=5) password = forms.CharField(required=True, min_length=5)
# types = forms.ChoiceField(initial=1,widget=forms.RadioSelect, choices= (('1', 'default'), ('2', 'educoder'),('3','trustie')))
# types= forms.ChoiceField(label=u'登录类型:', choices=((u'1', u'defalut'), (u'2', u'educoder'),(u'3', u'trustie'), ), widget=forms.RadioSelect())
class RegisterForm(forms.Form): # 注册 class RegisterForm(forms.Form): # 注册
email = forms.EmailField(required=True) email = forms.EmailField(required=True)

View File

@ -0,0 +1,19 @@
# Generated by Django 2.0.6 on 2018-08-20 22:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0003_auto_20180731_2115'),
]
operations = [
migrations.AddField(
model_name='user',
name='password_tmp',
field=models.CharField(default='', max_length=100),
preserve_default=False,
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 2.0.6 on 2018-08-20 23:33
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('users', '0004_user_password_tmp'),
]
operations = [
migrations.RenameField(
model_name='user',
old_name='password_tmp',
new_name='password_codepedia',
),
]

View File

@ -51,6 +51,8 @@ class User(AbstractUser):
role = models.CharField(max_length=3, choices=ROLE_CHOICE, default='1') role = models.CharField(max_length=3, choices=ROLE_CHOICE, default='1')
create_time = models.DateTimeField(auto_now_add=True) create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True) update_time = models.DateTimeField(auto_now=True)
password_codepedia = models.CharField(max_length=100)
USERNAME_FIELD = 'username' USERNAME_FIELD = 'username'
class Meta: class Meta:

View File

@ -85,6 +85,7 @@ class RegisterView(View):
user.email = email user.email = email
user.is_active = True user.is_active = True
user.password = make_password(pwd1) user.password = make_password(pwd1)
user.password_codepedia = user.password
user.save() user.save()
return render(request,'users/login.html') return render(request,'users/login.html')
@ -172,54 +173,133 @@ def getCodeByFileIdAndLinenum(file_id,linenum):
# 用户登录 # 用户登录
class LoginView(View): class LoginView(View):
def get(self, request):
return render(request, 'users/login.html', {})
def post(self, request): def login_trustie(self,email,pass_word,request):
login_form = LoginForm(request.POST) # login
if login_form.is_valid(): user_params = {'username': email, 'password': pass_word}
email = request.POST.get('email', '') trustie_url = 'https://www.trustie.net/account/codepedia_login'
pass_word = request.POST.get('password', '') response = requests.get(trustie_url, params=user_params)
response = json.loads(response.text)
status = response['status']
# status == 1表示登录成功
if status == 1:
user_message = response['user']['user']
email = user_message['mail']
exist_records = User.objects.filter(email=email).first()
# 如果没有当前email的数据那么新建用户
if not exist_records:
user = User()
user.username = email
user.password = make_password(pass_word)
user.password_codepedia = user.password
user.email = email
if 'lastname' in user_message:
user.nick_name = user_message['lastname']
elif 'nickname' in user_message:
user.nick_name = user_message['nickname']
else:
user.nick_name = user_message['firstname']
user.is_active = True
user.save()
user = authenticate(username=email, password=pass_word)
# 现在的策略是密码与educoder保持一致
else:
user = exist_records
# 如果使用trustie登陆那么就要记录之前的密码
user.password = make_password(pass_word)
user.save()
user = authenticate(username=email, password=pass_word)
# 否则用当前用户名和密码登录
if user is not None:
login(request, user)
return HttpResponseRedirect(reverse('index'))
else:
return render(request, 'users/login.html', {'msg': '用户名或密码错误!'})
else:
return render(request, 'users/login.html', {'msg': '用户名或密码错误!'})
def login_educoder(self,email,pass_word,request):
private_token = "hriEn3UwXfJs3PmyXnSG"
user_params = {'username': email, 'password': pass_word,"private_token":private_token}
login_url = 'http://www.educoder.net/api/v1/sources/login'
response = requests.get(login_url, params=user_params)
response = json.loads(response.text)
status = response['status']
if status == 1:
educoder_userid = response['user_id']
educoder_userid = "15583"
userinfo_url = "http://www.educoder.net/api/v1/sources/"+educoder_userid+"/get_user_info?private_token="+private_token
response = requests.get(userinfo_url)
response = json.loads(response.text)
exist_records = User.objects.filter(email=email).first()
if not exist_records:
user = User()
user.username = response['username']
user.password = make_password(pass_word)
user.password_codepedia = user.password
user.email = response['email']
user.is_active = True
user.save()
user = authenticate(username=email, password=pass_word)
# 现在的策略是密码与educoder保持一致
else:
user = exist_records
user.password = make_password(pass_word)
user.save()
user = authenticate(username=email, password=pass_word)
# 否则用当前用户名和密码登录
if user is not None:
login(request, user)
return HttpResponseRedirect(reverse('index'))
else:
return render(request, 'users/login.html', {'msg': '用户名或密码错误!'})
else:
return render(request, 'users/login.html', {'msg': '用户名或密码错误!'})
def login_default(self,email,pass_word,request):
exist_records = User.objects.filter(email=email).first()
if exist_records:
user = exist_records
user.password = user.password_codepedia
user.save()
user = authenticate(email=email, password=pass_word) user = authenticate(email=email, password=pass_word)
# 如果本地用户没有获取到前往trustie获取用户
if user is not None: if user is not None:
if user.is_active: if user.is_active:
print(user.is_active)
login(request, user) login(request, user)
return HttpResponseRedirect(reverse('index')) return HttpResponseRedirect(reverse('index'))
else: else:
return render(request, 'users/login.html', {'msg': '用户未激活!请到邮箱激活后,再登录'}) return render(request, 'users/login.html', {'msg': '用户未激活!请到邮箱激活后,再登录'})
else: else:
user_params = {'username': email, 'password': pass_word} return render(request, 'users/login.html', {'msg': '用户名或邮箱不存在'})
trustie_url = 'https://www.trustie.net/account/codepedia_login' else:
response = requests.get(trustie_url, params=user_params) return render(request, 'users/login.html', {'msg': '用户名或邮箱不存在'})
response = json.loads(response.text)
status = response['status']
if status == 1: def get(self, request):
user_message = response['user']['user'] login_form = LoginForm()
email = user_message['mail'] return render(request, 'users/login.html', locals())
exist_records = User.objects.filter(email=email).first()
if not exist_records: def post(self, request):
user = User() login_form = LoginForm(request.POST)
user.username = email # print(login_form)
user.password = make_password(pass_word) if login_form.is_valid():
user.email = email email = request.POST.get('email', '')
if 'lastname' in user_message: pass_word = request.POST.get('password', '')
user.nick_name = user_message['lastname'] choice = int(request.POST.get('types',''))
elif 'nickname' in user_message: # 如果本地用户没有获取到前往trustie获取用户
user.nick_name = user_message['nickname']
else: # choice=1表示default是指用codepedia本地的密码登陆
user.nick_name = user_message['firstname'] # chocie=2表示educoder是指用educoder的方式登陆
user.is_active = True # chocie=3表示trustie是指用trustie的方式登陆
user.save() if choice == 1:
user = authenticate(username=email, password=pass_word) return self.login_default(email,pass_word,request)
if user is not None: elif choice == 2:
login(request, user) return self.login_educoder(email,pass_word,request)
return HttpResponseRedirect(reverse('index')) elif choice == 3:
else: return self.login_trustie(email,pass_word,request)
return render(request, 'users/login.html', {'msg': '用户名或密码错误!'})
else:
return render(request, 'users/login.html', {'msg': '用户名或密码错误!'})
else: else:
return render(request, 'users/login.html', {'login_form': login_form}) return render(request, 'users/login.html', {'login_form': login_form})
@ -290,6 +370,7 @@ class ForgetPwdView(View):
}) })
else: else:
user.password = pwd1 user.password = pwd1
user.password_codepedia = user.password
user.save() user.save()
print(1111) print(1111)
return render(request, 'users/modifypwd_success.html') return render(request, 'users/modifypwd_success.html')

View File

@ -833,7 +833,7 @@ pre.prettyprint {
.put-select span.active { .put-select span.active {
color: #05101a; color: #05101a;
border: 1px solid #05101a; border: 1px solid #989898;
text-align: center; text-align: center;
margin: 10px 10px 10px 0px; margin: 10px 10px 10px 0px;
} }
@ -1442,7 +1442,7 @@ color: #FFF !important;
.codelinebox{ .codelinebox{
line-height: 19px; line-height: 19px;
min-height: 19px; min-height: 19px;
margin-bottom: -5px; margin-bottom: -16px;
} }
.newmypre{ .newmypre{
margin: 0 0 16px 28px; margin: 0 0 16px 28px;
@ -1524,4 +1524,19 @@ color: #FFF !important;
.panel-leffont{ .panel-leffont{
fonr-size:24px; fonr-size:24px;
color:#C3BDBD; color:#C3BDBD;
}
.newcodeline{
min-width: 910px;
width: 100%;
height: 23px;
/* background: #f1efec; */
display: flex;
}
.newcodelinebox{
line-height: 25px;
min-height: 25px;
margin-bottom: 0px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }

View File

@ -98,7 +98,6 @@ function modify_anno(file_id,line_num){
} }
}); });
$("."+file_id+line_num).text("//"+content) $("."+file_id+line_num).text("//"+content)
console.log(content);
} }
// FIXME // FIXME
@ -324,7 +323,7 @@ function submit_annotation(file_id, line_num, content) {
//将注释添加到当前行的上一行 //将注释添加到当前行的上一行
console.log(data.anno_content) console.log(data.anno_content)
var contenthtml ='<div class="linenum"></div>'+'<div class="sourcecode">'+'<pre class="mypre newaddmypre hljs-comment ' + file_id+line_num + '">'+data.anno_content+'</pre>'+'</div>'+'<div class="linestatus"></div>'; var contenthtml ='<div class="linenum"></div>'+'<div class="sourcecode">'+'<pre class="mypre newaddmypre hljs-comment ' + file_id+line_num + '">'+data.anno_content+'</pre>'+'</div>'+'<div class="linestatus"></div>';
var html = '<div class="codeline codelinebox">'+contenthtml+'</div>'; var html = '<div class="newcodeline newcodelinebox">'+contenthtml+'</div>';
var id=file_id+'_'+"L"+line_num; var id=file_id+'_'+"L"+line_num;
console.log(html) console.log(html)
$("#"+id).before(html); $("#"+id).before(html);
@ -694,9 +693,9 @@ function generate_codereading_content(lines,self_annos,fileid,annos_count,issues
function generate_codereading_anno_line(linenum,self_annos){ function generate_codereading_anno_line(linenum,self_annos){
var htmlstr = '' var htmlstr = ''
htmlstr += '<div class="codeline codelinebox">' htmlstr += '<div class="newcodeline newcodelinebox">'
htmlstr += '<div class="sourcecode">' htmlstr += '<div class="sourcecode">'
htmlstr += '<pre class="mypre mypre newmypre hljs-comment}">' htmlstr += '<pre class="mypre mypre newmypre hljs-comment">'
htmlstr += self_annos[linenum] htmlstr += self_annos[linenum]
htmlstr += '</pre>' htmlstr += '</pre>'
htmlstr += '</div>' htmlstr += '</div>'

View File

@ -1,6 +1,6 @@
{% load base_filter %} {% load base_filter %}
<div class="code_file"> <div class="code_file">
{% formatText2Line project.name file.path as lines %} {% formatText2Line project.name file.path as lines %}
{% for linenum,line in lines.items %} {% for linenum,line in lines.items %}
{% if linenum in self_annos %} {% if linenum in self_annos %}
@ -14,7 +14,7 @@
<!-- <div id="linestatus_{{fileid}}_{{ linenum }}" class="linestatus"> --> <!-- <div id="linestatus_{{fileid}}_{{ linenum }}" class="linestatus"> -->
<div class="linestatus"> <div class="linestatus">
</div> </div>
</div> </div>
{% endif %} {% endif %}

View File

@ -24,13 +24,20 @@
<form id="email_register_form" method="post" action="{% url 'users:login' %}" autocomplete="off"> <form id="email_register_form" method="post" action="{% url 'users:login' %}" autocomplete="off">
<ul> <ul>
<li class="new_register_li form-group {% if login_form.errors.email %}errorput{% endif %}"> <li class="new_register_li form-group {% if login_form.errors.email %}errorput{% endif %}">
<input type="text" class="new_register_input" id="id_email" name="email" value="{{ login_form.email.value }}" placeholder="请输入您的邮箱地址或用户名"> <input type="text" class="new_register_input" id="id_email" name="email" placeholder="请输入您的邮箱地址或用户名">
</li> </li>
<li class="new_register_li form-group {% if login_form.errors.password %} errorput{% endif %}"> <li class="new_register_li form-group {% if login_form.errors.password %} errorput{% endif %}">
<input type="password" class="new_register_input" id="id_password" name="password" value="{{ login_form.password1.value }}" placeholder="请输入6-20位非中文字符密码" /> <input type="password" class="new_register_input" id="id_password" name="password" value="{{ login_form.password1.value }}" placeholder="请输入6-20位非中文字符密码" />
</li> </li>
</ul> </ul>
<div class="error btns" id="jsEmailTips">{% for key,error in login_form.errors.items %}{{ error }}{% endfor %}{{ msg }}</div>
<input type="radio" name="types" value="1" checked />default
<input type="radio" name="types" value="2" />educoder
<input type="radio" name="types" value="3" />trustie
<div class="error btns" id="jsEmailTips">{% for key,error in login_form.errors.items %}{{ error }}{% endfor %}{{ msg }}</div>
<div class="auto-box marb8"></div> <div class="auto-box marb8"></div>
<input class="btn btn-green new_login_submit" id="jsEmailRegBtn" type="submit" value="登录" /> <input class="btn btn-green new_login_submit" id="jsEmailRegBtn" type="submit" value="登录" />
{% csrf_token %} {% csrf_token %}
@ -41,4 +48,8 @@
{% endblock %} {% endblock %}
{% block custom_js %} {% block custom_js %}
<script src="{% static 'js/users-common.js' %}"></script> <script src="{% static 'js/users-common.js' %}"></script>
<script>
alert("参与代码标注比赛的用户请选择Educoder选项然后用Educoder的用户名和密码登录")
// 如果已有Trustie用户或者Educoder用户请选择对应的选项然后用对应账户名密码登陆
</script>
{% endblock %} {% endblock %}