Django之学员管理三

  web框架的本质:

    本质是客户端和服务端的交互。用socket实现。

    socket客户端(浏览器)

      2、发送ip和端口,http://www.baidu.com:80/index/   (http://www.baidu.com:80) 为ip和端口,(/index/ )是url。客户端往服务端发送请求时,是要分post和get两种请求方式。

      4、接受响应,普通的响应就是正常的拿到响应体浏览器是处理呈现,而重定向是要再发一次http请求,进行一次跳转才可以。

    socket服务端(服务器)

      1、服务端socket先运行起来进行监听 while循环来持续监听ip和端口,等待客户连接。

      3、接受请求,处理并返回相应的结果,返回的本质是一堆字符串。返回的有响应头和响应体。还有一种响应方式,是重定向返回,在重定向返回里是没有响应体的,只有响应头。在响应头里有一区别是多了一个location,在location里定义要响应跳转的url。

  django的web框架:

    a、创建project:django-admin startproject mysite

    b、配置:模板,静态文件,csrf

    c、路由关系:url-》函数

    d、视图函数:

        def index(request):

      获取的:request.method

          request.POST 

          request.GET

      返回的:return redirect("url")

          return render(request, "模板路径", { } )

          return HttpResponse("字符串")

    e、模板渲染:{% for %} 和 {% if %}

  Ajax的本质流程:

    基于jQuery实现的ajax,

    $.ajax({

      url:"",

      type:"",

      data:{k1:"v1"},

      success:function(arg){

      }

    })

   小知识点:在onclick的前面加一个href的url,是先执行onclick的事件,在跳转到href的url。但是如何在ajax里的对应事件执行完,返回return False,那么在href里的url就不在执行啦。这个方法用在form表单中。

  对班级表实现ajax方式的编辑删除操作(对话框的单表的编辑操作):

    注意点:一定要注意前后端的标签id是否一致,和$(#' ') 里面要拿取的标签id前的#符号,否则会找不到值,并且前端不会有报错。

    前端操作代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>classes</title>
  6. <style>
  7. .hide{
  8. display: none;
  9. }
  10. .shadow{
  11. position: fixed;
  12. left: 0;
  13. top: 0;
  14. right: 0;
  15. bottom: 0;
  16. background-color: black;
  17. opacity: 0.4;
  18. z-index: 999;
  19. }
  20. .modal{
  21. z-index: 1000;
  22. position: fixed;
  23. left: 50%;
  24. top: 50%;
  25. height: 300px;
  26. width: 400px;
  27. background-color: white;
  28. margin-left: -200px;
  29. margin-top: -150px;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <h1>classes_list</h1>
  35. <div>
  36. <a href="/add_class/">添加</a>
  37. |
  38. <a onclick="showModal();">对话框添加</a>
  39. </div>
  40. <table>
  41. <thead>
  42. <tr>
  43. <th>ID</th>
  44. <th>班级名称</th>
  45. <th>操作</th>
  46. </tr>
  47. </thead>
  48. <tbody>
  49. {% for item in class_lsit %}
  50. <tr>
  51. <td>{{ item.nid }}</td>
  52. <td>{{ item.title }}</td>
  53. <td>
  54. <a href="/del_class/?nid={{ item.nid }}">删除</a>
  55. |
  56. <a onclick="modelEdit(this);">对话框编辑</a>
  57. |
  58. <a href="/edit_class/?nid={{ item.nid }}">编辑</a>
  59. </td>
  60. </tr>
  61. {% endfor %}
  62. </tbody>
  63. </table>
  64.  
  65. <div id="shadow" class="shadow hide"></div>
  66.  
  67. <div id="modal" class="modal hide">
  68. <p>添加班级:<input id="title" type="text" name="title" placeholder="班级名称"></p>
  69. <input type="button" value="submit" onclick="AjaxSend();"/>
  70. <input type="button" value="cancel" onclick="cancleModal();"/><span id="errormsg"></span>
  71. </div>
  72.  
  73. <div id="editModel" class="modal hide">
  74. <h3>编辑框</h3>
  75. <p>
  76. <input id="editId" type="text" name="nid" style="display: none" />
  77. <input id="editTitle" type="text" name="title" />
  78. </p>
  79. <input type="button" value="submit" onclick="editAjaxSend();" /><span id="errormsg"></span>
  80. <input type="button" value="cancel" onclick="cancleModal();" />
  81. </div>
  82. <script src="/static/jquery-1.12.4.js"></script>
  83. <script>
  84. function showModal() {
  85. document.getElementById("shadow").classList.remove("hide"); //找到遮罩层,并去挑遮罩层
  86. document.getElementById("modal").classList.remove("hide");
  87. }
  88.  
  89. function cancleModal() {
  90. document.getElementById('shadow').classList.add('hide');
  91. document.getElementById('modal').classList.add('hide');
  92. document.getElementById('editModel').classList.add('hide');
  93. }
  94.  
  95. function AjaxSend(){
  96. $.ajax({
  97. url:'/modal_add_classes_ajax/', //往哪里提交
  98. type:'POST', //以什么方式提交
  99. data:{"title":$("#title").val()}, //拿到全段输入的值
  100. success:function (data) {
  101. //当服务端处理完成后,返回数据时,该函数自动调用
  102. //data是服务端返回的值
  103. console.log(data);
  104. if(data=="ok"){
  105. location.href='/classes/'; //指定提交成功后跳转到哪里
  106. }else {
  107. $('#errormsg').text(data);
  108. }
  109. }
  110. })
  111. }
  112.  
  113. function modelEdit(ths) {
  114. document.getElementById("shadow").classList.remove("hide"); //找到遮罩层,并去挑遮罩层
  115. document.getElementById("editModel").classList.remove("hide");
  116. /*
  117. 1、获取当前点击标签
  118. 2、获取当前标签的父标签,再找其上方标签
  119. 3、获取当前行班级名称,赋值到编辑对话框中
  120. */
  121. var row = $(ths).parent().prevAll() //$(ths)是获取当前标签。 .parent是当前父标签。 .prevAll是当前级标签的上面所有的标签。
  122. console.log(row);
  123. var content = $(row[0]).text(); //用列表取值的方式获取title。 .text是转成文本信息。
  124. $('#editTitle').val(content); //找到title给他赋值给val里。
  125.  
  126. var contentId = $(row[1]).text();
  127. $('#editId').val(contentId);
  128. }
  129.  
  130. function editAjaxSend() {
  131. var nid = $('#editId').val(); //提交操作里前端获取id
  132. var content = $('#editTitle').val(); // 提交操作,前端获取新输入的值
  133. console.log(nid,content);
  134. $.ajax({
  135. url:'/modal_edit_classes_ajax/',
  136. type:"POST",
  137. data:{"nid":nid,"content":content},
  138. success:function (arg) {
  139. // arg字符串类型
  140. // JSON.parse(字符串) => 对象
  141. // JSON.stringify(对象) => 字符串
  142. arg = JSON.parse(arg);
  143. if(arg.status){
  144. //location.href="/classes/" //这个是跳转
  145. location.reload(); //这个是刷新
  146. }else{
  147. alert(arg.message);
  148. }
  149. }
  150. })
  151. }
  152.  
  153. </script>
  154. </body>
  155. </html>

  views.py 的对应函数: 

  1. def modal_edit_classes_ajax(request):
  2. ret = {"status":True,"message":None} #当try代码块出现问题,可以用这种方式收集错误信息
  3. try:
  4. nid = request.POST.get("nid") # 拿id
  5. print(nid)
  6. content = request.POST.get("content") #拿内容
  7. print(content)
  8. sqlheper.modify("update classes set title=%s where nid=%s",[content,nid,])
  9. print("1")
  10. except Exception as e:
  11. ret['status'] = False
  12. ret['message'] = "处理异常"
  13. # ret['message'] = str(e) #异常对象的内容,用字符串的形式拿到。
  14. return HttpResponse(json.dumps(ret)) #用json.dumps的方法使的json将数据转成字符串,在发给前端

  

在单表的ajax里,编辑和添加操作,班级表和老师表是一致的。

下面,我们来研究一下如何实现一对多的ajax操作,也就是学生表的操作。在操作学生表中,对比操作单表而言,对了一个连表操作,那究竟如何在ajax中加以实现这个操作呐?下面我们来看一下如何实现吧!!!

 我们先实现添加操作:

  在这里说明一点,单表的ajax操作是用onclick的方式实现,那么在学生表里,我们就是jQuery实现一下,这样也是为了体验和运用两种绑定事件的方法。

   实现步骤区别:在标签位,和onclick不同,在a标签里不写onclick,写id就好。在导入jQuery,然后添加$(function( { } ) )

  students.html 代码实现:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>students</title>
  6. <style>
  7. .hide{
  8. display: none;
  9. }
  10. .shadow{
  11. position: fixed;
  12. left: 0;
  13. top: 0;
  14. right: 0;
  15. bottom: 0;
  16. background-color: black;
  17. opacity: 0.4;
  18. z-index: 999;
  19. }
  20. .add-modal{
  21. z-index: 1000;
  22. position: fixed;
  23. left: 50%;
  24. top: 50%;
  25. height: 300px;
  26. width: 400px;
  27. background-color: white;
  28. margin-left: -200px;
  29. margin-top: -150px;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <h1>students_list</h1>
  35. <div>
  36. <a href="/add_students_add/">添加</a>
  37. |
  38. <a id="addModal">对话框添加</a>
  39. </div>
  40. <table>
  41. <thead>
  42. <tr>
  43. <th>ID</th>
  44. <th>学生姓名</th>
  45. <th>所属班级</th>
  46. <th>操作</th>
  47. </tr>
  48. </thead>
  49. <tbody>
  50. {% for item in students_list %}
  51. <tr>
  52. <td>{{ item.sid }}</td>
  53. <td>{{ item.name }}</td>
  54. <td>{{ item.title }}</td>
  55. <td>
  56. <a href="/del_students_del/?sid={{ item.sid }}">删除</a>
  57. |
  58. <a href="/edit_students_edit/?sid={{ item.sid }}">编辑</a>
  59. |
  60. <a onclick="">对话框编辑</a>
  61. </td>
  62. </tr>
  63. {% endfor %}
  64. </tbody>
  65. </table>
  66.  
  67. <div id="shadow" class="shadow hide"></div>
  68.  
  69. <div id="add-Modal" class="add-modal hide">
  70. <p>
  71. Name:<input id="addName" type="text" name="name" placeholder="Name">
  72. </p>
  73. <p>
  74. Classes:
  75. <select id="addClassesId" name="classesID" >
  76. {% for row in classes_list %}
  77. <option value="{{ row.nid }}">{{ row.title }}</option>
  78. {% endfor %}
  79. </select>
  80. </p>
  81. <input id="btnAdd" type="button" value="添加" />
  82. <input id="btncancel" type="button" value="取消" />
  83. <span id="addError" style="color: red;"></span>
  84. </div>
  85.  
  86. <script src="/static/jquery-1.12.4.js"></script>
  87. <script>
  88. //绑定事件。click进行绑定事件
  89. $(function () {
  90. $("#addModal").click(function () {
  91. $("#shadow,#add-Modal").removeClass('hide');
  92. })
  93.  
  94. $("#btncancel").click(function () {
  95. $("#shadow,#add-Modal").addClass("hide");
  96. })
  97.  
  98. $('#btnAdd').click(function () {
  99. $.ajax({
  100. url:"/modal_add_students_modal/",
  101. type:"POST",
  102. data:{"name":$("#addName").val(),"classes_id":$("#addClassesId").val()},
  103. success:function (arg) {
  104. //回调函数,
  105. console.log(arg); //将数据发送给后台
  106. arg = JSON.parse(arg);
  107. if(arg.status){
  108. location.reload();
  109. }else{
  110. $("#addError").text(arg.message);
  111. }
  112. }
  113. })
  114. })
  115. })
  116.  
  117. </script>
  118. </body>
  119. </html>

  view.py 的students表的ajax实现的后端代码:

  1. def modal_add_students_modal(request):
  2. ret = {"status":True,"message":None}
  3. try:
  4. name = request.POST.get("name")
  5. classes_id = request.POST.get("classes_id")
  6. sqlheper.modify('insert into students(name,classes_id) values(%s,%s)',[name,classes_id,])
  7. except Exception as e:
  8. ret['status'] = False
  9. ret['message'] = str(e)
  10.  
  11. return HttpResponse(json.dumps(ret))

  在实现了students的ajax的添加操作后,来实现一下编辑操作。

  编辑操作的点在于如何拿取班级信息,因为学生的姓名和id和单表一致,可是学生表是一对多的关联班级表,所以,如何解决班级的id获取是关键。

  在编辑时,拿取班级ID和学生默认值是问题点的核心。

  下面来实现一下students的编辑操作:

  students.html 的学生编辑ajax操作的前端代码实现:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>students</title>
  6. <style>
  7. .hide{
  8. display: none;
  9. }
  10. .shadow{
  11. position: fixed;
  12. left: 0;
  13. top: 0;
  14. right: 0;
  15. bottom: 0;
  16. background-color: black;
  17. opacity: 0.4;
  18. z-index: 999;
  19. }
  20. .add-modal{
  21. z-index: 1000;
  22. position: fixed;
  23. left: 50%;
  24. top: 50%;
  25. height: 300px;
  26. width: 400px;
  27. background-color: white;
  28. margin-left: -200px;
  29. margin-top: -150px;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <h1>students_list</h1>
  35. <div>
  36. <a href="/add_students_add/">添加</a>
  37. |
  38. <a id="addModal">对话框添加</a>
  39. </div>
  40. <table>
  41. <thead>
  42. <tr>
  43. <th>ID</th>
  44. <th>学生姓名</th>
  45. <th>所属班级</th>
  46. <th>操作</th>
  47. </tr>
  48. </thead>
  49. <tbody>
  50. {% for item in students_list %}
  51. <tr>
  52. <td>{{ item.sid }}</td>
  53. <td>{{ item.name }}</td>
  54. <td clsId="{{ item.classes_id }}">{{ item.title }}</td>
  55. <td>
  56. <a href="/del_students_del/?sid={{ item.sid }}">删除</a>
  57. |
  58. <a href="/edit_students_edit/?sid={{ item.sid }}">编辑</a>
  59. |
  60. <a class="btn-edit">对话框编辑</a>
  61. </td>
  62. </tr>
  63. {% endfor %}
  64. </tbody>
  65. </table>
  66.  
  67. <div id="shadow" class="shadow hide"></div>
  68.  
  69. <div id="add-Modal" class="add-modal hide">
  70. <p>
  71. Name:<input id="addName" type="text" name="name" placeholder="Name">
  72. </p>
  73. <p>
  74. Classes:
  75. <select id="addClassesId" name="classesID" >
  76. {% for row in classes_list %}
  77. <option value="{{ row.nid }}">{{ row.title }}</option>
  78. {% endfor %}
  79. </select>
  80. </p>
  81. <input id="btnAdd" type="button" value="add" />
  82. <input onclick="cancleModal();" type="button" value="cancel" />
  83. <span id="addError" style="color: red;"></span>
  84. </div>
  85.  
  86. <div id="editModal" class="add-modal hide">
  87. <h3>编辑学生信息</h3>
  88. <p>
  89. 学生姓名:<input id="editName" type="text" name="name" placeholder="Name">
  90. <input type="text" id="editId" style="display: none">
  91. </p>
  92. <p>
  93. 所属班级:
  94. <select id="editClassesId" name="classes_id" >
  95. {% for classes in classes_list %}
  96. <option value="{{ classes.nid }}">{{ classes.title }}</option>
  97. {% endfor %}
  98. </select>
  99. </p>
  100. <input id="btnEdit" type="button" value="update">
  101. <input onclick="cancleModal();" type="button" value="cancel">
  102. <span id="editError" style="color: red;"></span>
  103. </div>
  104.  
  105. <script src="/static/jquery-1.12.4.js"></script>
  106. <script>
  107. //绑定事件。click进行绑定事件
  108. $(function () {
  109. $("#addModal").click(function () {
  110. $("#shadow,#add-Modal").removeClass('hide');
  111. })
  112.  
  113. $('#btnAdd').click(function () {
  114. $.ajax({
  115. url:"/modal_add_students_modal/",
  116. type:"POST",
  117. data:{"name":$("#addName").val(),"classes_id":$("#addClassesId").val()},
  118. success:function (arg) {
  119. //回调函数,
  120. console.log(arg); //将数据发送给后台
  121. arg = JSON.parse(arg);
  122. if(arg.status){
  123. location.reload();
  124. }else{
  125. $("#addError").text(arg.message);
  126. }
  127. }
  128. })
  129. })
  130.  
  131. $(".btn-edit").click(function () {
  132. $("#shadow,#editModal").removeClass("hide");
  133. /*
  134. 1.获取当前标签 $(this) 就是当期标签
  135. */
  136. var tds = $(this).parent().prevAll();
  137. var studentsId = $(tds[2]).text();
  138. var studentsName = $(tds[1]).text();
  139. var classesId = $(tds[0]).attr("clsId");
  140. console.log(studentsId,studentsName,classesId);
  141.  
  142. //赋值操作,也就是带默认值
  143. $("#editId").val(studentsId);
  144. $("#editName").val(studentsName);
  145. $("#editClassesId").val(classesId);
  146.  
  147. })
  148.  
  149. $("#btnEdit").click(function () {
  150. $.ajax({
  151. url:'/modal_edit_students_modal/',
  152. type:"POST",
  153. data:{"sid":$("#editId").val(),"name":$("#editName").val(),"classes_id":$("#editClassesId").val()},
  154. dataType:"JSON", //这里的JSON就直接做了JSON的序列化操作,执行JSON.parse(arg) 在这里JSON会先把arg先转换为对象
  155. success:function (arg) {
  156. if (arg.status){
  157. location.reload();
  158. }else{
  159. $("#editError").text(arg.message);
  160. }
  161. }
  162. })
  163. })
  164. })
  165.  
  166. //取消操作
  167. function cancleModal() {
  168. document.getElementById('shadow').classList.add('hide');
  169. document.getElementById('add-Modal').classList.add('hide')
  170. document.getElementById('editModal').classList.add('hide')
  171. }
  172.  
  173. </script>
  174. </body>
  175. </html>

  views.py 的学生编辑ajax后端代码实现:

  1. def modal_edit_students_modal(request):
  2. ret = {"status":True,"message":None}
  3. try:
  4. sid = request.POST.get("sid")
  5. name = request.POST.get("name")
  6. classes_id = request.POST.get("classes_id")
  7. sqlheper.modify("update students set name=%s,classes_id=%s where sid=%s", [name,classes_id,sid,])
  8. except Exception as e:
  9. ret["status"] = False
  10. ret["message"] = str(e)
  11. return HttpResponse(json.dumps(ret))

  

  一对多的操作在学生表的操作里展现的可以简单说明啦,那么下面,我们来看一下多对多的操作:

  老师班级关系表:

  id  teacher_id  class_id

  多对多建表操作请去目录数据库查看mysql多对多操作。

  先实现查操作,就是在前端显示出老师和班级的关联:

   但是,多对多的展示,是要有一个基准表的,一谁去查,比如我们的老师班级关系表,我们可以以老师为基准,去查看这个老师都授课了那些班级,也可以以班级表为基准,来查看这个班级都有那些老师来授课,并且有一点,在展示时,不能展示teacher_id 和 class_id 的id号,而是老师的姓名或班级的名称。

  多对多操作:查看

  我们这里以老师表为基准,来展示一下, 所以就创建一个teacherandclass。

  问题点,如何在一行里显示一个老师任课的多个班级,是要将班级的字典都存在在一个列表里,那样就可以实现一行数据里显示一个老师或班级,所属的多个班级或老师啦。

  teacherandclass.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>teacherandclass</title>
  6. </head>
  7. <body>
  8. <h1>老师和班级关系表</h1>
  9. <table border="1">
  10. <thead>
  11. <tr>
  12. <th>ID</th>
  13. <th>Teacher name</th>
  14. <th>Class name</th>
  15. <th>操作</th>
  16. </tr>
  17. </thead>
  18. <tbody>
  19. {% for foo in teacher_class_list %}
  20. <tr>
  21. <td>{{ foo.tid }}</td>
  22. <td>{{ foo.name }}</td>
  23. <td>
  24. {% for item in foo.titles %}
  25. <span style="display: inline-block;padding: 5px;border: 1px solid red;">{{ item }}</span>
  26. {% endfor %}
  27. </td>
  28. <td>
  29. <a >Edit</a>
  30. |
  31. <a >Delete</a>
  32. </td>
  33. </tr>
  34. {% endfor %}
  35. </tbody>
  36. </table>
  37. </body>
  38. </html>

  在后端的teacherandclass.py 函数:

  1. def teacherandclass(request):
  2. teacher_class_list = sqlheper.get_list("""
  3. select teacher.nid as tid,teacher.`name`,classes.title from teacher
  4. LEFT JOIN teacherandclasses ON teacher.nid = teacherandclasses.teacher_id
  5. LEFT JOIN classes ON classes.nid = teacherandclasses.class_id;
  6. """,[])
  7. print(teacher_class_list)
  8. result = {} #定义一个空字典,用来存放 teacher_class_list 的数据
  9. for row in teacher_class_list: #循环teacher_class_list 列表,将列表的每一个字典取出来处理
  10. tid = row["tid"] #拿取字典的每一个tid进行判断
  11. if tid in result: #如果tid在已有的result字典里,就将这个tid所属的title加进新定义的titles里
  12. result[tid]["titles"].append(row["title"])
  13. else: #如果没有的话,就将新的tid按照新定义的形式,加到result里
  14. result[tid] = {"tid":row["tid"],"name":row["name"],"titles":[row["title"],]}
  15. return render(request,"teacherandclass.html",{"teacher_class_list":result.values()})

  以上是多对多的查看操作的实现方式。

  那么多对多的添加和编辑操作,如何实现呐!请看下回分解,在下一期,我们不仅仅会实现多对多的添加和编辑,还会有ajax的多对多的操作。

--------- END ----------

Django之学员管理三的更多相关文章

  1. Django之学员管理一

    Django之学员管理一 建表结构: #班级表class: id title 1 五年一班 2 五年二班 3 五年三班 4 五年四班 #学生表student: id name 班级ID(FK外键) 1 ...

  2. Django之学员管理

    Django之学员管理 实现-------在前端页面提交的数据,后端可直接写入数据库.在页面实现操作数据库的增删改查. 数据表设计:(三个角色四张表) 班级表: id title 1 花果山国小一年级 ...

  3. Django之学员管理二

    Django之学员管理二 学生表的一对多的增删改查 views.py def students(request): #select students.sid,students.name,classes ...

  4. Django pymysql学员管理系统

    学员管理系统 项目规划阶段 项目背景 近年来老男孩教育的入学学员数量稳步快速增长,传统的excel统计管理学员信息的方式已经无法满足日渐增长的业务需求.因此公司急需一套方便易用的“学员管理系统”,来提 ...

  5. 我的django之旅(三)数据库和模型

    我的django之旅(三)模型和数据库 标签(空格分隔):模型 数据库 ORM 1.django ORM django内置了一套完整的解决方案,其中就包括他自己的ORM.可惜没有使用SQLAlchem ...

  6. Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第三部分(Page 8)

    编写你的第一个 Django app,第三部分(Page 8)转载请注明链接地址 本页教程接前面的第二部分.我们继续开发 web-poll app,我们会专注于创建公共接口上 -- "视图& ...

  7. Django中模型(三)

    Django中模型(三) 四.模型成员 1.类属性 objects:是Manager类的一个对象,作用是与数据库进行交互. 定义模型类时,没有定义管理器,则默认创建名为objects的管理器. 2.自 ...

  8. python框架Django使用xadmin管理后台数据

    Django使用xadmin管理后台数据 关注公众号"轻松学编程"了解更多. 作用:xadmin比Django内置的admin更美观.更方便. 一.导入xadmin(第三方库) 方 ...

  9. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

随机推荐

  1. 极限和连续 limits + Continue

    上一节我们将导数定义为切线的斜率,这是一种几何解释.我们求出了1/x的斜率为 -1/x2 求出了 f(x) = xn 的斜率是 f”(x) = n*xn-1  这些几何的推导都是根据y-y0  = k ...

  2. android 百度地图

    展示当前位置地图 参考百度定位demo (LocationDemo) 实现此功能,运行发现 BDLocationListener 的onReceiveLocation方法无法执行,原因是 Androi ...

  3. net 上传视频

    [HttpPost]        public ActionResult MultiUpload()        {            System.Web.HttpFileCollectio ...

  4. Spring 2.5

    Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository.@Service 和 @Controller.在目前的 Spring ...

  5. Lucky Array Codeforces - 121E && Bear and Bad Powers of 42 Codeforces - 679E

    http://codeforces.com/contest/121/problem/E 话说这题貌似暴力可A啊... 正解是想出来了,结果重构代码,调了不知道多久才A 错误记录: 1.线段树搞混num ...

  6. Codeforces Round #325 (Div. 2)

    水 A - Alena's Schedule /************************************************ * Author :Running_Time * Cr ...

  7. 【转】log4j的日志

    一.Log4j配置 第一步:加入log4j-1.2.8.jar到lib下. 第二步:在CLASSPATH下建立log4j.properties.内容如下: 放在src下的话就不用配置 否则得去web. ...

  8. Android开发-浅谈架构(二)

    写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...

  9. 外文翻译 《How we decide》被情感愚弄 第二节

    本节阅读感言:我们在遭受损失后,很容易破罐子破摔,做出更糟糕的决定. 书的导言 本章第一节 情感系统的缺陷会产生很重要的影响.想一想股票市场,一个典型的随机系统的例子.短期的波动无法给未来长期的股市情 ...

  10. hdu1513 Palindrome

    思路: dp+滚动数组. 实现: #include <iostream> #include <cstdio> #include <string> #include ...