全局导航&个人中心&全局搜索

配置全局导航

让index页面也继承base页面,注意首页有个单独的__index.js__

base页面的导航栏也进行配置

  1. <nav>
  2. <div class="nav">
  3. <div class="wp">
  4. <ul>
  5. <li ><a href="{% url 'index' %}">首页</a></li>
  6. <li >
  7. <a href="{% url 'course:list' %}">
  8. 公开课<img class="hot" src="{% static "images/nav_hot.png" %}">
  9. </a>
  10. </li>
  11. <li >
  12. <a href="{% url 'org:teacher_list' %}">授课教师</a>
  13. </li>
  14. <li class="active" ><a href="{% url 'org:org_list' %}">授课机构</a></li>
  15. </ul>
  16. </div>
  17. </div>
  18. </nav>

但是现在我们不知道当前是哪一个页面,因为后端没有传值过来

这里可以使用request.path进行判断

比如http://127.0.0.1:8000/org/teacher_list/,则request.path 就是`/org/teacher_list/``

slice:12 是过滤器,取前12位数

利用这种方法可以达到全局的“active”效果,而不用每个子页面都要去设置“active”了

  1. <ul>
  2. <li {% if request.path == '/' %}class="active"{% endif %}><a href="{% url 'index' %}">首页</a></li>
  3. <li {% if request.path|slice:'7' == '/course' %}class="active"{% endif %}>
  4. <a href="{% url 'course:list' %}">
  5. 公开课<img class="hot" src="{% static 'images/nav_hot.png' %}">
  6. </a>
  7. </li>
  8. <li {% if request.path|slice:'12' == '/org/teacher' %}class="active"{% endif %}>
  9. <a href="{% url 'org:teacher_list' %}">授课教师</a>
  10. </li >
  11. <li {% if request.path|slice:'9' == '/org/list' %}class="active"{% endif %}>
  12. <a href="{% url 'org:org_list' %}">授课机构</a></li>
  13. </ul>

全局搜索功能

通过url中加参数keywords来达到全局搜索的功能

以Course搜索为例:

  1. # 搜索功能
  2. search_keywords = request.GET.get('keywords', '')
  3. if search_keywords:
  4. # icontains是包含的意思(不区分大小写)
  5. # Q可以实现多个字段,之间是or的关系
  6. all_course = all_course.filter(
  7. Q(name__icontains=search_keywords) | Q(desc__icontains=search_keywords) | Q(
  8. detail__icontains=search_keywords))

搜索的代码放在deco-common.js

如果自己写的url和js文件中的不同,可自行修改

  1. //顶部搜索栏搜索方法
  2. function search_click(){
  3. var type = $('#jsSelectOption').attr('data-value'),
  4. keywords = $('#search_keywords').val(),
  5. request_url = '';
  6. if(keywords == ""){
  7. return
  8. }
  9. if(type == "course"){
  10. request_url = "/course/list?keywords="+keywords
  11. }else if(type == "teacher"){
  12. request_url = "/org/teacher/list?keywords="+keywords
  13. }else if(type == "org"){
  14. request_url = "/org/list?keywords="+keywords
  15. }
  16. window.location.href = request_url
  17. }

课程机构搜索功能

  1. # 机构搜索功能
  2. search_keywords = request.GET.get('keywords', '')
  3. if search_keywords:
  4. # 在name字段进行操作,做like语句的操作。i代表不区分大小写
  5. # or操作使用Q
  6. all_orgs = all_orgs.filter(Q(name__icontains=search_keywords) | Q(desc__icontains=search_keywords))

授课老师搜索功能

  1. # 搜索功能
  2. search_keywords = request.GET.get('keywords', '')
  3. if search_keywords:
  4. # 在name字段进行操作,做like语句的操作。i代表不区分大小写
  5. # or操作使用Q
  6. all_teachers = all_teacher.filter(name__icontains=search_keywords)

个人中心信息展示

新建usercenter-bae.html当模板

进行配置

  1. path("users/", include('users.urls', namespace="users")),
  1. from django.urls import path
  2. from users.views import UserinfoView
  3. app_name = 'users'
  4. urlpatterns = [
  5. #用户信息
  6. path("info/", UserinfoView.as_view(),name='user_info'),
  7. ]
  1. class UserinfoView(LoginRequiredMixin,View):
  2. '''用户个人信息'''
  3. def get(self,request):
  4. return render(request,'usercenter-info.html',{})

前端显示个人信息

  1. <div class="right">
  2. <div class="personal_des ">
  3. <div class="head" style="border:1px solid #eaeaea;">
  4. <h1>个人信息</h1>
  5. </div>
  6. <div class="inforcon">
  7. <div class="left" style="width:242px;">
  8. <iframe id='frameFile' name='frameFile' style='display: none;'></iframe>
  9. <form class="clearfix" id="jsAvatarForm" enctype="multipart/form-data" autocomplete="off" method="post" action="/users/image/upload/" target='frameFile'>
  10. <label class="changearea" for="avatarUp">
  11. <span id="avatardiv" class="pic">
  12. <img width="100" height="100" class="js-img-show" id="avatarShow" src="{{ MEDIA_URL }}{{ request.user.image }}"/>
  13. </span>
  14. <span class="fl upload-inp-box" style="margin-left:70px;">
  15. <span class="button btn-green btn-w100" id="jsAvatarBtn">修改头像</span>
  16. <input type="file" name="image" id="avatarUp" class="js-img-up"/>
  17. </span>
  18. </label>
  19. {% csrf_token %}
  20. </form>
  21. <div style="border-top:1px solid #eaeaea;margin-top:30px;">
  22. <a class="button btn-green btn-w100" id="jsUserResetPwd" style="margin:80px auto;width:100px;">修改密码</a>
  23. </div>
  24. </div>
  25. <form class="perinform" id="jsEditUserForm" autocomplete="off">
  26. <ul class="right">
  27. <li>昵&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;称:
  28. <input type="text" name="nick_name" id="nick_name" value="{{ request.user.name }}" maxlength="10">
  29. <i class="error-tips"></i>
  30. </li>
  31. <li>生&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日:
  32. <input type="text" id="birth_day" name="birday" value="{{ request.user.birthday }}" readonly="readonly"/>
  33. <i class="error-tips"></i>
  34. </li>
  35. <li>性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:
  36. <label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="gender" value="male"
  37. {% ifequal request.user.gender "male" %}
  38. checked="checked"
  39. {% endifequal %}
  40. ></label>
  41. <label>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="gender" value="female"
  42. {% ifequal request.user.gender "female" %}
  43. checked="checked"
  44. {% endifequal %}
  45. ></label>
  46. </li>
  47. <li class="p_infor_city">地&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;址:
  48. <input type="text" name="address" id="address" placeholder="请输入你的地址" value="{{ request.user.address }}" maxlength="10">
  49. <i class="error-tips"></i>
  50. </li>
  51. <li>手&nbsp;&nbsp;机&nbsp;&nbsp;号:
  52. <input type="text" name="mobile" id="mobile" placeholder="请输入你的手机号码" value="{{ request.user.mobile|default_if_none:'' }}" maxlength="11">
  53. </li>
  54. <li>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱:
  55. <input class="borderno" type="text" name="email" readonly="readonly" value="{{ request.user.email }}"/>
  56. <span class="green changeemai_btn">[修改]</span>
  57. </li>
  58. <li class="button heibtn">
  59. <input type="button" id="jsEditUserBtn" value="保存">
  60. </li>
  61. </ul>
  62. {% csrf_token %}
  63. </form>
  64. </div>
  65. </div>
  66. </div>

修改密码和修改头像

  1. #用户图像上传
  2. path("image/upload/", UploadImageView.as_view(),name='image_upload'),

新建一个用于保存图片的form

这里继承的是ModelForm,该类具有save功能

  1. # 用于文件上传,修改头像
  2. class UploadImageForm(forms.ModelForm):
  3. class Meta:
  4. model = UserProfile
  5. fields = ['image']
  1. class UploadImageView(LoginRequiredMixin,View):
  2. '''用户图像修改'''
  3. def post(self,request):
  4. # 这时候用户上传的文件就已经被保存到image_form了 ,为modelform添加instance值直接保存
  5. image_form = UploadImageForm(request.POST, request.FILES, instance=request.user)
  6. if image_form.is_valid():
  7. image_form.save()
  8. # 所有验证通过的字段放在cleaned data
  9. # # 取出cleaned data中的值,一个dict
  10. # image = image_form.cleaned_data['image']
  11. # request.user.image = image
  12. # request.user.save()
  13. return HttpResponse('{"status":"success"}', content_type='application/json')
  14. else:
  15. return HttpResponse('{"status":"fail"}', content_type='application/json')
  1. #用户个人中心修改密码
  2. path("update/pwd/", UpdatePwdView.as_view(),name='update_pwd'),
  1. # 在个人中心修改用户密码
  2. class UpdatePwdView(View):
  3. def post(self, request):
  4. modiypwd_form = ModifyPwdForm(request.POST)
  5. if modiypwd_form.is_valid():
  6. pwd1 = request.POST.get("password1", "")
  7. pwd2 = request.POST.get("password2", "")
  8. # 如果两次密码不相等,返回错误信息
  9. if pwd1 != pwd2:
  10. return HttpResponse('{"status":"fail", "msg":"密码不一致"}', content_type='application/json')
  11. # 如果密码一致
  12. user =request.user
  13. # 加密成密文
  14. user.password = make_password(pwd2)
  15. # save保存到数据库
  16. user.save()
  17. return HttpResponse('{"status":"success"}', content_type='application/json')
  18. # 验证失败说明密码位数不够。
  19. else:
  20. return HttpResponse('{"status":"fail", "msg":"填写错误请检查"}', content_type='application/json')

Ajxa代码放在deco-user.js里面

如果url不正确可自行配置'

如果遇到403,检查base中的csrf_token是否填写

发送修改邮箱验证码

有两个接口需要完成。点击获取验证码时,后台需要向用户新邮箱发送验证码。

邮箱如果出错,会返回错误信息。

输入了邮箱和验证码,验证是否匹配。

EmailVerifyRecord再添加一个选择类型

  1. SEND_CHOICES = (
  2. ("register", "注册"),
  3. ("forget", "找回密码"),
  4. ("update_email", "修改邮箱")
  5. )
  1. #发送邮箱验证码
  2. path("sendemail_code/", SendEmailCodeView.as_view(),name='sendemail_code'),
  1. # 发送邮箱验证码view
  2. class SendEmailCodeView(LoginRequiredMixin, View):
  3. def get(self,request):
  4. # 取出需要发送的邮件
  5. email = request.GET.get("email", "")
  6. # 不能是已注册的邮箱
  7. if UserProfile.objects.filter(email=email):
  8. return HttpResponse('{"email":"邮箱已经存在"}', content_type='application/json')
  9. send_register_eamil(email, "update_email")
  10. return HttpResponse('{"status":"success"}', content_type='application/json')

修改utils/email_send.py

  1. if send_type == "update_email":
  2. email_title = "慕课在线 修改邮箱"
  3. email_body = "验证码:{0}".format(code)
  4. # 使用Django内置函数完成邮件发送。四个参数:主题,邮件内容,从哪里发,接受者list
  5. send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])
  6. # 如果发送成功
  7. if send_status:
  8. pass

修改邮箱

  1. #修改邮箱
  2. path("update_email/", UpdateEmailView.as_view(),name='update_email'),
  1. # 修改邮箱的view:
  2. class UpdateEmailView(LoginRequiredMixin, View):
  3. def post(self, request):
  4. email = request.POST.get("email", "")
  5. code = request.POST.get("code", "")
  6. existed_records = EmailVerifyRecord.objects.filter(email=email, code=code, send_type='update_email')
  7. if existed_records:
  8. user = request.user
  9. user.email = email
  10. user.save()
  11. return HttpResponse('{"status":"success"}', content_type='application/json')
  12. else:
  13. return HttpResponse('{"email":"验证码无效"}', content_type='application/json')

个人信息修改

  1. # 个人中心信息修改
  2. class UserInfoForm(forms.ModelForm):
  3. class Meta:
  4. model = UserProfile
  5. fields = ['nick_name','gender','birthday','address','mobile']

UserinfoView添加post方法

  1. class UserinfoView(LoginRequiredMixin,View):
  2. '''用户个人信息'''
  3. def get(self,request):
  4. return render(request,'usercenter-info.html',{})
  5. def post(self, request):
  6. # 需要指明instance。不然无法修改,而是新增用户
  7. user_info_form = UserInfoForm(request.POST, instance=request.user)
  8. if user_info_form.is_valid():
  9. user_info_form.save()
  10. return HttpResponse('{"status":"success"}', content_type='application/json')
  11. else:
  12. return HttpResponse(json.dumps(user_info_form.errors), content_type='application/json')

我的课程

  1. # 用户中心我的课程
  2. path('mycourse/', MyCourseView.as_view(), name="mycourse"),
  1. # 个人中心页我的课程
  2. class MyCourseView(LoginRequiredMixin, View):
  3. def get(self, request):
  4. user_courses = UserCourse.objects.filter(user=request.user)
  5. return render(request, "usercenter-mycourse.html", {
  6. "user_courses":user_courses,
  7. })
  1. {% block custom_right_content %}
  2. <div class="right" >
  3. <div class="personal_des Releasecont">
  4. <div class="head">
  5. <h1>我的课程</h1>
  6. </div>
  7. </div>
  8. <div class="personal_des permessage">
  9. <div class="companycenter">
  10. <div class="group_list brief">
  11. {% for cours in user_courses %}
  12. <div class="module1_5 box">
  13. <a href="course-detail.html">
  14. <img width="214" height="190" class="scrollLoading" src="{{ MEDIA_URL }}{{ cours.course.image }}"/>
  15. </a>
  16. <div class="des">
  17. <a href="course-detail.html"><h2>{{ cours.course.name }}</h2></a>
  18. <span class="fl">课时:<i class="key">{{ cours.course.learn_times }}</i></span>
  19. <span class="fr">学习人数:{{ cours.course.students }}</span>
  20. </div>
  21. <div class="bottom">
  22. <span class="fl">{{ cours.course.course_org.name }}</span>
  23. <span class="star fr notlogin" data-favid="15">{{ cours.course.course_org.fav_nums }}</span>
  24. </div>
  25. </div>
  26. {% endfor %}
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. {% endblock %}

我的收藏--课程机构

  1. # 我的收藏--课程机构
  2. path('myfav/org/', MyFavOrgView.as_view(), name="myfav_org"),
  1. # 我收藏的课程机构
  2. class MyFavOrgView(LoginRequiredMixin, View):
  3. def get(self, request):
  4. org_list = []
  5. fav_orgs= UserFavorite.objects.filter(user=request.user, fav_type=2)
  6. # 上面的fav_orgs只是存放了id。我们还需要通过id找到机构对象
  7. for fav_org in fav_orgs:
  8. # 取出fav_id也就是机构的id。
  9. org_id = fav_org.fav_id
  10. # 获取这个机构对象
  11. org = CourseOrg.objects.get(id=org_id)
  12. org_list.append(org)
  13. return render(request, "usercenter-fav-org.html", {
  14. "org_list": org_list,
  15. })

我的收藏--授课讲师

Teacher添加一个方法

  1. def get_course_nums(self):
  2. return self.course_set.all().count()
  1. # 我收藏的授课讲师
  2. path('myfav/teacher/', MyFavTeacherView.as_view(), name="myfav_teacher"),
  1. class MyFavTeacherView(LoginRequiredMixin, View):
  2. '''我收藏的授课讲师'''
  3. def get(self, request):
  4. teacher_list = []
  5. fav_teachers = UserFavorite.objects.filter(user=request.user, fav_type=3)
  6. for fav_teacher in fav_teachers:
  7. teacher_id = fav_teacher.fav_id
  8. teacher = Teacher.objects.get(id=teacher_id)
  9. teacher_list.append(teacher)
  10. return render(request, "usercenter-fav-teacher.html", {
  11. "teacher_list": teacher_list,
  12. })

我的收藏--公开课程

  1. #我的收藏--课程
  2. path('myfav/course/', MyFavCourseView.as_view(), name="myfav_course"),
  1. class MyFavCourseView(LoginRequiredMixin,View):
  2. """
  3. 我收藏的课程
  4. """
  5. def get(self, request):
  6. course_list = []
  7. fav_courses = UserFavorite.objects.filter(user=request.user, fav_type=1)
  8. for fav_course in fav_courses:
  9. course_id = fav_course.fav_id
  10. course = Course.objects.get(id=course_id)
  11. course_list.append(course)
  12. return render(request, 'usercenter-fav-course.html', {
  13. "course_list":course_list,
  14. })

我的消息页面

  1. #我的消息
  2. path('my_message/', MyMessageView.as_view(), name="my_message"),
  1. class MyMessageView(LoginRequiredMixin, View):
  2. '''我的消息'''
  3. def get(self, request):
  4. all_message = UserMessage.objects.filter(user= request.user.id)
  5. try:
  6. page = request.GET.get('page', 1)
  7. except PageNotAnInteger:
  8. page = 1
  9. p = Paginator(all_message, 4,request=request)
  10. messages = p.page(page)
  11. return render(request, "usercenter-message.html", {
  12. "messages":messages,
  13. })

取消收藏

修改usercenter-bae.html模板中的Ajax代码

修改HTML文件

注册时发生欢迎消息

  1. # 写入欢迎注册消息
  2. user_message = UserMessage()
  3. user_message.user = user_profile.id
  4. user_message.message = "欢迎注册!!"
  5. user_message.save()

页面顶部小喇叭

所有页面都要读取一个共同的变量:未读消息的数量。我们需要向request中注入这个变量

所有页面都有request.user对象。所以我们在userprofile中自定义方法,

  1. # 获取用户未读消息的数量
  2. def unread_nums(self):
  3. from operation.models import UserMessage
  4. return UserMessage.objects.filter(user=self.id).count()

退出

  1. # 退出功能url
  2. path('logout/', LogoutView.as_view(), name="logout"),
  1. class LogoutView(View):
  2. def get(self, request):
  3. # django自带的logout
  4. logout(request)
  5. # 重定向到首页,
  6. return HttpResponseRedirect(reverse("index"))

点击数加1

课程 CourseInfoView

  1. course.students += 1
  2. course.save()

TeacherDetailView

  1. teacher.click_nums += 1
  2. teacher.save()

OrgHomeView

  1. course_org.click_nums += 1
  2. course_org.save()

收藏数

organization/views.py中的 AddFavView

  1. if exist_records:
  2. # 如果记录已经存在, 则表示用户取消收藏
  3. exist_records.delete()
  4. if int(type) == 1:
  5. course = Course.objects.get(id=int(id))
  6. course.fav_nums -= 1
  7. if course.fav_nums < 0:
  8. course.fav_nums = 0
  9. course.save()
  10. elif int(type) == 2:
  11. org = CourseOrg.objects.get(id=int(id))
  12. org.fav_nums -= 1
  13. if org.fav_nums < 0:
  14. org.fav_nums = 0
  15. org.save()
  16. elif int(type) == 3:
  17. teacher = Teacher.objects.get(id=int(id))
  18. teacher.fav_nums -= 1
  19. if teacher.fav_nums < 0:
  20. teacher.fav_nums = 0
  21. teacher.save()
  22. return HttpResponse('{"status":"success", "msg":"收藏"}', content_type='application/json')
  23. else:
  24. user_fav = UserFavorite()
  25. # 过滤掉未取到fav_id type的默认情况
  26. if int(type) > 0 and int(id) > 0:
  27. user_fav.fav_id = int(id)
  28. user_fav.fav_type = int(type)
  29. user_fav.user = request.user
  30. user_fav.save()
  31. if int(type) == 1:
  32. course = Course.objects.get(id=int(id))
  33. course.fav_nums += 1
  34. course.save()
  35. elif int(type) == 2:
  36. org = CourseOrg.objects.get(id=int(id))
  37. org.fav_nums += 1
  38. org.save()
  39. elif int(type) == 3:
  40. teacher = Teacher.objects.get(id=int(id))
  41. teacher.fav_nums += 1
  42. teacher.save()
  43. return HttpResponse('{"status":"success", "msg":"已收藏"}', content_type='application/json')

修改消息已读

  1. class MyMessageView(LoginRequiredMixin, View):
  2. '''我的消息'''
  3. def get(self, request):
  4. all_message = UserMessage.objects.filter(user= request.user.id)
  5. # 用户进入个人中心消息页面,清空未读消息记录
  6. all_unread_messages = all_message.filter(has_read=False)
  7. for unread_message in all_unread_messages:
  8. unread_message.has_read = True
  9. unread_message.save()
  10. try:
  11. page = request.GET.get('page', 1)
  12. except PageNotAnInteger:
  13. page = 1
  14. p = Paginator(all_message, 4, request=request)
  15. messages = p.page(page)
  16. return render(request, "usercenter-message.html", {
  17. "messages":messages,
  18. })

个人中心左侧active状态

  1. <div class="left">
  2. <ul>
  3. <li {% ifequal '/users/info/' request.path %}
  4. class="active2"
  5. {% endifequal %}><a href="{% url 'users:user_info' %}">个人资料</a></li>
  6. <li {% ifequal '/users/mycourse/' request.path %}
  7. class="active2"
  8. {% endifequal %}><a href="{% url 'users:mycourse' %}">我的课程</a></li>
  9. <li {% ifequal '/users/myfav/' request.path|slice:'13' %}
  10. class="active2"
  11. {% endifequal %}><a href="{% url 'users:myfav_org' %}">我的收藏</a></li>
  12. <li {% ifequal '/users/my_message/' request.path %}
  13. class="active2"
  14. {% endifequal %}>
  15. <a href="{% url 'users:my_message' %}" style="position: relative;">
  16. 我的消息
  17. </a>
  18. </li>
  19. </ul>
  20. </div>

Django+Xadmin打造在线教育系统(七)的更多相关文章

  1. Django+Xadmin打造在线教育系统(四)

    完成授课机构的功能 模板继承 在templates目录下,新建base.html,剪切org-list.html内容到里面 编写org-list.html内容 继承base.html,将里面的面包屑和 ...

  2. Django+Xadmin打造在线教育系统(三)

    完成登录 注册 找回密码 激活 验证码集成 将HTML文件拷贝到templates目录下,css,js,img,media,images文件夹拷贝到static文件夹下 修改index.html和lo ...

  3. Django+Xadmin打造在线教育系统(二)

    基于xadmin的后台管理 先使用pip进行安装xadmin及其依赖包 pip install django-adminx 安装完成后卸载xadmin,保留依赖包即可 pip uninstall dj ...

  4. Django+Xadmin打造在线教育系统(九)

    xadmin的进阶开发 因版本问题.有些配置可能无效 自定义icon xadmin的图标采用的是第三方css样式font awesome,我们可以进官网下载最新的样式替代原本的,下载地址:http:/ ...

  5. Django+Xadmin打造在线教育系统(一)

    系统概括: 系统具有完整的用户登录注册以及找回密码功能,拥有完整个人中心. 个人中心: 修改头像,修改密码,修改邮箱,可以看到我的课程以及我的收藏.可以删除收藏,我的消息. 导航栏: 公开课,授课讲师 ...

  6. Django+Xadmin打造在线教育系统(八)

    首页和全局404,500配置 轮播图 公开课 授课机构 新建view ## 首页view class IndexView(View): def get(self,request): # 取出轮播图 a ...

  7. Django+Xadmin打造在线教育系统(五)

    课程相关功能实现 课程列表 创建课程相关的urls.py path("course/", include('course.urls', namespace="course ...

  8. Django+Xadmin打造在线教育系统(六)

    讲师相关功能实现 拷贝并修改teacher-list.html和teacher-detail.html, 继承base模板 # 讲师列表 path('teacher_list/', TeacherLi ...

  9. Django+xadmin打造在线教育平台(一)

    目录 在线教育平台(一)      在线教育平台(二) 在线教育平台(三)      在线教育平台(四) 在线教育平台(五)      在线教育平台(六) 在线教育平台(七)      在线教育平台( ...

随机推荐

  1. InvalidDataAccessResourceUsageException:mysql保留字引发的血案

    org.springframework.dao.InvalidDataAccessResourceUsageException: could NOT EXECUTE statement; SQL [n ...

  2. sql中distinct和order by问题的解决方案

    需求:根据PID字段对数据去重,根据Sort字段排序,需要显示这个两个字段. 如图,这是原始数据,先排序: 排序后发现两个项是重复的,需要去除一个, 因为Distinct对检查Select里面的每一列 ...

  3. C#格式化字符串大全

    C#格式化字符串大全 分类: VS/C#         1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}" ...

  4. 微服务治理平台的RPC方案实现

    导读:本文主要探讨了rpc框架在微服务化中所处的位置,需要解决的问题.同时介绍了用友云微服务治理平台的rpc解决方案,为什么选择该方案.该方案提供的好处是什么.同时也会介绍用友RPC框架的基本结构以及 ...

  5. 斐波那契数列yield表示

    def fib(num): n=0 a,b=0,1 while n<num: print(b) yield a,b=b,a+b n=n+1a=fib(30)next(a)next(a)  

  6. Ubuntu18.04更新源

    一.备份/etc/apt/sources.list文件 cd /etc/apt sudo cp sources.list sources.list.old 二.选择国内常用的源 #阿里源 deb ht ...

  7. WIN下修改host文件并立即生效

    怎样修改WIN7下的host文件_百度经验https://jingyan.baidu.com/article/9faa72317903f1473c28cb01.html hosts立即生效的方法 - ...

  8. 如何入门vue之一

    入门vue 首先从vue的指令开始学起. vue的指令: v-if  根据是否得到的布尔值进行是否显示. v-show:根据是否得到的布尔值是否显示.不同的地方在于隐藏是style隐藏. v-on 监 ...

  9. jenkins配置SSH远程服务器连接

    之前用jenkins做了一个自动发布测试,配置任务的Post Steps时,选择的是执行shell命令.如下图: 这是在本192.168.26.233服务器上测试的,此服务器上运行jenkins,to ...

  10. java类型的小知识List 等

    List 复制之 浅拷贝与深拷贝 详细连接https://blog.csdn.net/never_tears/article/details/79067245 java中判断字符串是否为数字的方法的几 ...