首先还是贴一下源代码地址  https://github.com/goodspeedcheng/sblog

上一篇博客我们介绍了 django 如何在views中使用templates以及一些常用的数据操作,这篇博客将介绍静态文件的使用、from 应用与自定义

1、静态文件的使用

鉴于我们上次所看到的界面惨不忍睹,为了不影响心情,先介绍一下如何使用静态文件美化界面

首先新建static目录,目录下新建css/js/img三个目录

修改seeting.py文件

  1. STATICFILES_DIRS = (
  2. '/home/gs/blog/static', #替换成自己的static 目录
  3. )

修改blog目录下 urls.py 添加以下内容

  1. urlpatterns += patterns((''),
  2. (r'^static/(?P<path>.*)$', 'django.views.static.serve',
  3. {'document_root': '/home/gs/blog/static'}
  4. ),
  5. )

当然这只是本机测试环境下的使用方法,生产环境这样部署是不可以的。

2、使用bootstrap美化界面

为了方便,我们使用bootstrap进行界面优化,如果你想自己写界面,这一步完全可以跳过去

bootstrap 下载地址 http://twitter.github.com/bootstrap/

中文文档:http://wrongwaycn.github.com/bootstrap/docs/index.html

bootstrap使用非常方便下载解压后 将其中的css/js/img 目录中文件分别放入static目录下相应文件夹就好了,然后修改base.html,在head标签添加

  1. <link rel="stylesheet" href="/static/css/bootstrap.css">
  2. <link rel="stylesheet" href="/static/css/reset.css">
  3. <link rel="stylesheet" href="/static/css/style.css">
  4. <link rel="stylesheet" href="/static/css/code.css">
  5. <script src="/static/js/modernizr.js"></script>
  6. <script src="/static/js/jquery.js"></script>

因为bootstrap需要jquery支持,所以必须要引入jquery ,因为我们使用的html5,使用modernizr会自动检测不兼容的浏览器利用js添加相应的功能。

在body添加

  1. <script src="/static/js/bootstrap.min.js"></script>

现在base.html是这个样子的

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>
  6. {% block title %}{% endblock %}
  7. </title>
  8. <link rel="stylesheet" href="/static/css/bootstrap.css">
  9. <script src="/static/js/modernizr.js"></script>
  10. <script src="/static/js/jquery.js"></script>
  11. {% block extra_head %}
  12. {% endblock %}
  13. </head>
  14.  
  15. <body>
  16. {% block body %}
  17. {% block header %}
  18. {# 任何每个页面都可能修改的文本区域的页面 #}
  19. {% block menu %}
  20. {# 你的菜单 (导航栏) 应该包含在这个区块中. 它是针对站点级的导航, 不是 每个页面专属的导航菜单. #}
  21. {% endblock %}
  22. {% endblock %}
  23. <div class="container">
  24. {% block content %}
  25. {# 这个区块用来放置页面正文内容. 任何页面正文内容都可能不一样. 它不 包含任何站点导航, 信息头, 页脚, 或其它任何属于 base 模板的东东. #}
  26.  
  27. <div class="container-fluid">
  28. <div class="row-fluid">
  29. <div class="span9">
  30. {% block article %}
  31. {% block article_title %}
  32. {% comment %}
  33. 用来指定 content 区块的 "title". 比如 blog 的标题.
  34. 也可以用来 包含 content 内的导航 (译注: 比如提纲), 或其它类似的东东.
  35. 大致都是些 页面中并非主要内容的东东.
  36. 我不知道这个区块是否应该放到 content tag 内, 并且对应于前面建议的 content tag,
  37. 是不是还需要一个 main_content 区块.
  38. {% block [section]_menu %} {% block page_menu %}
  39. 这是对应于之前建议的 menu 区块. 用来导航一个章节或页面.
  40. {% endcomment %}
  41. {% endblock %}
  42. {% block article_content %}{% endblock %}
  43. {% endblock %}
  44.  
  45. {% block article_menu %} {% endblock %}
  46. {% block comments %} {% endblock %}
  47. </div>
  48. <div class="span3">
  49. {% block aside %}
  50. {% block tags %}{% endblock %}
  51. {% endblock %}
  52. </div>
  53. </div>
  54. </div>
  55. {% endblock %}
  56. {% block footer %}
  57. {# 任何每个页面都可能修改的文本区域的页脚 #}
  58. <p>Thanks for visiting my site! </p>
  59. {% endblock %}
  60. {% endblock %}
  61. </div>
  62. <script src="/static/js/bootstrap.min.js"></script>
  63. </body>
  64. </html>

因为base.html中block越多以后越方便,所以我添加了一些标签,可以暂时忽略

其中用到了bootstrap的布局,阅读文档吧: http://twitter.github.com/bootstrap/scaffolding.html

然后新建一个blog_base.html文件,添加blog中会用到的内容,比如导航栏、搜索框等

  1. {% extends "base.html" %}
  2.  
  3. {% block extra_head %}
  4. <style>
  5. body {
  6. padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
  7. }
  8. </style>
  9. {% endblock %}
  10.  
  11. {% block header %}
  12. {% block menu %}
  13. <div class="navbar navbar-inverse navbar-fixed-top">
  14. <div class="navbar-inner">
  15. <div class="container">
  16. <a class="brand" href="#">BLOG</a>
  17. <ul class="nav">
  18. <li class="active divider-vertical">
  19. <a href="{% url bloglist %}">home</a>
  20. </li>
  21. <li>
  22. <a href="#">about</a>
  23. </li>
  24. <li>
  25. <a href="#">contact</a>
  26. </li>
  27. </ul>
  28. </div>
  29. </div>
  30. </div>
  31. {% endblock %}
  32. {% endblock %}

修改blog_list.html 文件和blog_show.html文件以适应bootstrap

blog_list.html

  1. {% extends "blog_base.html" %}
  2. {% load comments %}
  3.  
  4. {% block title %} blog list {% endblock %}
  5.  
  6. {% block article %}
  7. <article class='content-main'>
  8. {% for blog in blogs %}
  9. <h4><a href="{% url detailblog blog.id %}">{{ blog.caption }}</a></h4>
  10. <p class="muted">
  11. {% for tag in blog.tags.all %}
  12. <i class="icon-tag"></i> <small>{{ tag }}</small>
  13. {% endfor %}
  14. </p>
  15. {% load markup %}
  16. <div>{{ blog.content|markdown:'codehilite' }} </div>
  17.  
  18. <div class="row-fluid">
  19. <div class="span3">
  20. <p class="muted"><i class="icon-time"></i><small> {{ blog.publish_time }}</small></p>
  21. </div>
  22. <div class="span2 offset7">
  23. <a href="{% url delblog blog.id %}" title="delete"><i class="icon-trash"></i></a>
  24. <a href="{% url updateblog blog.id %}" title="edit"><i class="icon-edit"></i></a>
  25. {% get_comment_count for blog as comment_count %}
  26. <a href="{% url detailblog blog.id %}#cmt" title="comment"><i class=" icon-comment"></i>{{ comment_count }}</a>
  27. </div>
  28. </div>
  29. <hr>
  30. {% endfor %}
  31. </article>
  32. {% endblock %}
  33.  
  34. {% block aside %}
  35.  
  36. <a class="btn" href="{# {% url addblog %} #}"><i class="icon-plus"></i> add new blog</a>
  37.  
  38. {% block tags %}
  39. <div class="well">
  40. {% for tag in tags %}
  41. <span class="label"><a href="{% url filtrblog tag.id %}">{{ tag }}</a></span>
  42. {% endfor %}
  43. </div>
  44. {% endblock %}
  45. {% endblock %}

其中

  1. <a class="btn" href="{# {% url addblog %} #}"><i class="icon-plus"></i> add new blog</a>

是接下来要说的添加文章的操作

  1. {% for tag in tags %}
  2. <span class="label"><a href="{% url filtrblog tag.id %}">{{ tag }}</a></span>
  3. {% endfor %}

需要在urls.py文件添加

  1. url(r'^blog/tag/(?P<id>\d+)/$', 'blog_filter', name='filtrblog'),

然后添加view

  1. from sblog.models import Tag
  2.  
  3. def blog_filter(request, id=''):
  4. tags = Tag.objects.all()
  5. tag = Tag.objects.get(id=id)
  6. blogs = tag.blog_set.all()
  7. return render_to_response("blog_filter.html",
  8. {"blogs": blogs, "tag": tag, "tags": tags})

blog_show.html

  1. {% extends "blog_base.html" %}
  2.  
  3. {% block title %} {{ blog.caption }} {% endblock %}
  4.  
  5. {% block article %}
  6.  
  7. <div class="content">
  8. <article class="content-main">
  9. {% block article_title %}
  10. <h2>{{ blog.caption }}</h2>
  11. {% endblock %}
  12. <p class="muted">
  13. <i class="icon-user"></i><small> {{ blog.author }}</small>
  14. <i class="icon-time"></i><small> {{ blog.publish_time }}</small>
  15. </p>
  16. <section>
  17. <div class="blog-content">
  18. {% block article_content %}
  19. {{ blog.content }}
  20. {% endblock %}
  21. </div>
  22. </section>
  23. <section>
  24. <div class="row-fluid post-info">
  25. <div class="span3">
  26. <p>
  27. <i class="icon-tag"></i>
  28. {% for tag in blog.tags.all %}
  29. <small class="muted"> {{ tag }} </small>
  30. {% endfor %}
  31. </p>
  32. </div>
  33. <div class="span2 offset7">
  34. <a href="{% url delblog blog.id %}" title="delete"><i class="icon-trash"></i></a>
  35. <a href="{% url updateblog blog.id %}" title="edit"><i class="icon-edit"></i></a>
  36. <a href="#cmt" title="comment"><i class=" icon-comment"></i></a>
  37. </div>
  38. </div>
  39. <hr>
  40. </section>
  41. </article>
  42. <hr>
  43. </div>
  44. {% endblock %}

这其中

  1. <section>
  2. <div class="row-fluid post-info">
  3. <div class="span3">
  4. <p>
  5. <i class="icon-tag"></i>
  6. {% for tag in blog.tags.all %}
  7. <small class="muted"> {{ tag }} </small>
  8. {% endfor %}
  9. </p>
  10. </div>
  11. <div class="span2 offset7">
  12. <a href="{% url delblog blog.id %}" title="delete"><i class="icon-trash"></i></a>
  13. <a href="{% url updateblog blog.id %}" title="edit"><i class="icon-edit"></i></a>
  14. <a href="#cmt" title="comment"><i class=" icon-comment"></i></a>
  15. </div>
  16. </div>
  17. <hr>
  18. </section>

是我们接下来要说的对blog的修改、删除等操作

3、表单的使用及自定义

通过钱两部,我们美化了一下界面,现在让我们来添加功能吧。

要实现添加博客的功能,我们必须要用到表单。

Django带有一个form库,称为django.forms,这个库可以处理我们本章所提到的包括HTML表单显示以及验证。当然我们现在有两个选择

  • 自己写,完成表单显示以及验证
  • 使用django提供的From

这里我们选择后者,既然我们选择了django,为什么还要重复的造轮子呢?

Form文档在此 https://docs.djangoproject.com/en/dev/topics/forms/ 我就不再介绍了,直接说怎么用吧。

首先修改urls.py 文件添加

  1. url(r'^blog/add/$', 'blog_add', name='addblog'),

然后在sblog目录下新建forms.py文件

  1. from django import forms
  2.  
  3. class BlogForm(forms.Form):
  4. caption = forms.CharField(label='title', max_length=100)
  5. content = forms.CharField(widget=forms.Textarea)

这里我们只博客的标题和内容

  1. CharField 表示字符类型 当你在本地显示这个表单的时,
  1. content字段被显示成`` input type=”text`` ,而它应该被显示成<`` textarea`` >。我们可以通过设置* widget* 来修改它

然后新建blog_add.html

  1. 1 {% extends "blog_base.html" %}
  2. 2
  3. 3 {% block title %} 发布文字 {% endblock %}
  4. 4
  5. 5
  6. 6 {% block article %}
  7. 7
  8. 8 <form action="" method="post">
  9. 9 {% csrf_token %}
  10. 10 <div class="field">
  11. 11 <label for="id_caption">Title: </label>
  12. 12 {% if form.caption.errors %}
  13. 13 <div class="alert alert-error">
  14. 14 {{ form.caption.errors }}
  15. 15 </div>
  16. 16 {% endif %}
  17. 17 {{ form.caption }}
  18. 18 </div>
  19. 19 <div class="field">
  20. 20 <label for="id_content">Content: </label>
  21. 21 {% if form.content.errors %}
  22. 22 <div class="alert alert-error">
  23. 23 {{ form.content.errors }}
  24. 24 </div>
  25. 25 {% endif %}
  26. 26 {{ form.content }}
  27. 27 </div>
  28. 28 <div class="form-actions">
  29. 29 <input class="btn btn-primary" type="submit" value="save and add">
  30. 30 </div>
  31. 31 </form>
  32. 32 {% endblock %}

添加views

  1. from django.http import HttpResponseRedirect
  2. from django.template import RequestContext
  3. from sblog.models import Author
  4. from sblog.forms import BlogForm
  5.  
  6. def blog_add(request):
  7. if request.method == 'POST':
  8. form = BlogForm(request.POST)
  9. if form.is_valid():
  10. cd = form.cleaned_data
  11. title = cd['caption']
  12. author = Author.objects.get(id=1)
  13. content = cd['content']
  14. blog = Blog(caption=title, author=author, content=content)
  15. blog.save()
  16. id = Blog.objects.order_by('-publish_time')[0].id
  17. return HttpResponseRedirect('/sblog/blog/%s' % id)
  18. else:
  19. form = BlogForm()
  20. return render_to_response('blog_add.html',
  21. {'form': form}, context_instance=RequestContext(request))

使用 form的is_valid()方法,验证它的数据是否合法,如果一个Form实体的数据是合法的,它就会有一个可用的cleaned_data属性。 这是一个包含干净的提交数据的字典。

这里我们默认作者是id=1,当然你也可以自己修改或者根据登录的session读取

博客提交后 使用HttpResponseRedirect 跳转到最新发表的博客页面

因为我们使用的是post 所以必须在表单后面添加 {% csrf_token %}

然后在视图中使用  context_instance=RequestContext(request)

现在你会发现我们并没有使用tags,好吧,现在我们添加 tag标签功能

首先修改forms.py文件 添加

  1. class TagForm(forms.Form):
  2. tag_name = forms.CharField()

然后修改视图

  1. 1 from sblog.forms import TagForm
  2. 2
  3. 3 def blog_add(request):
  4. 4 if request.method == 'POST':
  5. 5 form = BlogForm(request.POST)
  6. 6 tag = TagForm(request.POST)
  7. 7 if form.is_valid() and tag.is_valid():
  8. 8 cd = form.cleaned_data
  9. 9 cdtag = tag.cleaned_data
  10. 10 tagname = cdtag['tag_name']
  11. 11 for taglist in tagname.split():
  12. 12 Tag.objects.get_or_create(tag_name=taglist.strip())
  13. 13 title = cd['caption']
  14. 14 author = Author.objects.get(id=1)
  15. 15 content = cd['content']
  16. 16 blog = Blog(caption=title, author=author, content=content)
  17. 17 blog.save()
  18. 18 for taglist in tagname.split():
  19. 19 blog.tags.add(Tag.objects.get(tag_name=taglist.strip()))
  20. 20 blog.save()
  21. 21 id = Blog.objects.order_by('-publish_time')[0].id
  22. 22 return HttpResponseRedirect('/sblog/blog/%s' % id)
  23. 23 else:
  24. 24 form = BlogForm()
  25. 25 tag = TagForm(initial={'tag_name': 'notags'})
  26. 26 return render_to_response('blog_add.html',
  27. 27 {'form': form, 'tag': tag}, context_instance=RequestContext(request))

  1. for taglist in tagname.split():
  2. Tag.objects.get_or_create(tag_name=taglist.strip())

表示将得到的tag字符串用空格分割开 并删除多余空格

get_or_create表示首先获取tag_name 如果存在就不操作,不存在就创建

在blog_add.html 文件合适的位置 添加

  1. <div class="field">
  2. <label for="id_tag">tags</label>
  3. {% if tag.tag_name.errors %}
  4. <div class="alert alert-error">
  5. {{ tag.tag_name.errors }}
  6. </div>
  7. {% endif %}
  8. {{ tag.tag_name }}
  9. </div>

现在刷新 http://127.0.0.1:8080/sblog/blog/add/ 是不是看到tag输入框了,(添加多个标签使用空格隔开)

4、更新文章内容

修改urls.py文件 添加

  1. url(r'^blog/(?P<id>\w+)/update/$', 'blog_update', name='updateblog'),

因为更新和添加所需表单内容相同,这里就直接使用blog_add.html 作为update的模板

在views.py添加

  1. def blog_update(request, id=""):
  2. id = id
  3. if request.method == 'POST':
  4. form = BlogForm(request.POST)
  5. tag = TagForm(request.POST)
  6. if form.is_valid() and tag.is_valid():
  7. cd = form.cleaned_data
  8. cdtag = tag.cleaned_data
  9. tagname = cdtag['tag_name']
  10. tagnamelist = tagname.split()
  11. for taglist in tagnamelist:
  12. Tag.objects.get_or_create(tag_name=taglist.strip())
  13. title = cd['caption']
  14. content = cd['content']
  15. blog = Blog.objects.get(id=id)
  16. if blog:
  17. blog.caption = title
  18. blog.content = content
  19. blog.save()
  20. for taglist in tagnamelist:
  21. blog.tags.add(Tag.objects.get(tag_name=taglist.strip()))
  22. blog.save()
  23. tags = blog.tags.all()
  24. for tagname in tags:
  25. tagname = unicode(str(tagname), "utf-8")
  26. if tagname not in tagnamelist:
  27. notag = blog.tags.get(tag_name=tagname)
  28. blog.tags.remove(notag)
  29. else:
  30. blog = Blog(caption=blog.caption, content=blog.content)
  31. blog.save()
  32. return HttpResponseRedirect('/sblog/blog/%s' % id)
  33. else:
  34. try:
  35. blog = Blog.objects.get(id=id)
  36. except Exception:
  37. raise Http404
  38. form = BlogForm(initial={'caption': blog.caption, 'content': blog.content}, auto_id=False)
  39. tags = blog.tags.all()
  40. if tags:
  41. taginit = ''
  42. for x in tags:
  43. taginit += str(x) + ' '
  44. tag = TagForm(initial={'tag_name': taginit})
  45. else:
  46. tag = TagForm()
  47. return render_to_response('blog_add.html',
  48. {'blog': blog, 'form': form, 'id': id, 'tag': tag},
  49. context_instance=RequestContext(request))

其中

  1. for taglist in tagnamelist:
  2. blog.tags.add(Tag.objects.get(tag_name=taglist.strip()))
  3. blog.save()
  4. tags = blog.tags.all()
  5. for tagname in tags:
  6. tagname = unicode(str(tagname), "utf-8")
  7. if tagname not in tagnamelist:
  8. notag = blog.tags.get(tag_name=tagname)
  9. blog.tags.remove(notag)

作用是将tag与blog关联,并且去掉原有关联修改后不关联的tag 例如blog1 原有tag为1,2 ,3 修改后为2, 3

这里的作用是去除blog1与tag 1的关联

5、删除文章

修改urls.py 添加

  1. url(r'^blog/(?P<id>\w+)/del/$', 'blog_del', name='delblog'),

修改views.py 添加

  1. def blog_del(request, id=""):
  2. try:
  3. blog = Blog.objects.get(id=id)
  4. except Exception:
  5. raise Http404
  6. if blog:
  7. blog.delete()
  8. return HttpResponseRedirect("/sblog/bloglist/")
  9. blogs = Blog.objects.all()
  10. return render_to_response("blog_list.html", {"blogs": blogs})

完成后发现我们并没有相关的update delete 链接

将第二步中的注释去掉吧 现在刷新 blog show 页面是否看到了呢

最后源代码可以在  https://github.com/goodspeedcheng/sblog 可以看一下 希望大家把错误的地方提出纠正一下。

                                                                                                                                                       谢谢

以上 关于from的内容能在 django book 2    第七章找到

扩展阅读: https://docs.djangoproject.com/en/1.4/

http://twitter.github.com/bootstrap/index.html

推荐 Django 最佳实践 - 中文版  https://github.com/brantyoung/zh-django-best-practices/blob/master/readme.rst/

 

 

django 简易博客开发 1 安装、创建、配置、admin使用

http://www.cnblogs.com/cacique/archive/2012/09/29/2707976.html

django 简易博客开发 2 模板和数据查询

http://www.cnblogs.com/cacique/archive/2012/09/30/2709143.html

django 简易博客开发 3 静态文件、from 应用与自定义

http://www.cnblogs.com/cacique/archive/2012/10/01/2709668.html

django 简易博客开发 4 comments库使用及ajax支持

http://www.cnblogs.com/cacique/archive/2012/10/03/2710803.html

django 简易博客开发 5 markdown支持、代码高亮、gravatar头像服务

http://www.cnblogs.com/cacique/archive/2012/10/07/2713703.html

django 简易博客开发 3 静态文件、from 应用与自定义的更多相关文章

  1. django 简易博客开发 5 markdown支持、代码高亮、gravatar头像服务

    上一篇博客介绍了comments库使用及ajax支持,现在blog已经具备了基本的功能,但是只能发表文字,不支持富文本编辑.今天我们利用markdown添加富文本支持. markdown语法说明: h ...

  2. django 简易博客开发 4 comments库使用及ajax支持

    首先还是贴一下源代码地址  https://github.com/goodspeedcheng/sblog 上一篇文章我们介绍了静态文件使用以及如何使用from实现对blog的增删改,这篇将介绍如何给 ...

  3. django 简易博客开发 2 模板和数据查询

    首先还是贴一下项目地址  https://github.com/goodspeedcheng/sblog   因为代码全在上面 上一篇博客我们介绍了 django的安装配置,新建project,新建a ...

  4. django 简易博客开发 1 安装、创建、配置、admin使用

    首先贴一下项目地址吧  https://github.com/goodspeedcheng/sblog 到现在位置项目实现的功能有: 1.后台管理使用Admin ,前端显示使用bootstrap 2. ...

  5. django 简易博客开发 1 安装、创建、配置、admin使用(转)

    Django 自称是“最适合开发有限期的完美WEB框架”.本文参考<Django web开发指南>,快速搭建一个blog 出来,在中间涉及诸多知识点,这里不会详细说明,如果你是第一次接触D ...

  6. Django个人博客开发 | 前言

    本渣渣不专注技术,只专注使用技术,不是一个资深的coder,是一个不折不扣的copier 1.前言 自学 Python,始于 Django 框架,Scrapy 框架,elasticsearch搜索引擎 ...

  7. 简易博客开发(8)----django1.9 博客部署到pythonanywhere上

    准备工作 首先需要注册一下,pythonanywhere的免费账户有一定的限制,只能创建一个web app,不能绑定独立域名,不能通过ssh连接,不过只是搭一个project也是够用了. 注册成功之后 ...

  8. Django练习——博客系统小试

    在上一篇博客Todolist的基础上(http://blog.csdn.net/hcx25909/article/details/24251427),本周继续进行实践,这次我要搭建一个简单的博客系统. ...

  9. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

随机推荐

  1. 如何理解Python中的if __name__ == '__main__'

    1. 摘要 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明'):在你自己眼中,你是你自己(__name__ == '_ ...

  2. iview table 已选项的数据 this.$refs.tables.$refs.tablesMain.getSelection()

    iview table 已选项的数据 this.$refs.tables.$refs.tablesMain.getSelection() 由于我这里table组件是套了两层组件 所以是进入了两个层次拿 ...

  3. Python list 增加/插入元素的说明

    http://blog.csdn.net/cnmilan/article/details/9259343 在Python中append 用来向 list 的末尾追加单个元素,如果增加的元素是一个lis ...

  4. selective_search_rcnn.m中代码

    im = imresize(im, [NaN im_width]):把图像转换为宽度为im_width,自动计算列数

  5. 转--C#编程总结

    C#编程总结--总目录 http://www.cnblogs.com/yank/p/3543423.html

  6. Calling method 'get' is not valid without an active transaction

    在进行使用注解来配置Spring和Hibernate的整合的时候, 遇到了这个问题, 它的意思是说在调用'get'方法的时候,没有活动的事务. 原因分析: Hibernate强制要求在进行数据库操作的 ...

  7. c/s端测试——nw.js篇(selenium工具)

    最近在为兄弟部门开发自动化测试工具. 然后才知道现在竟然有JS工具可以把JS打包成cs端程序了,太牛了,js发展是真快.并且还是跨平台的,mac.windows.linux都支持. 当然,今天不是说n ...

  8. luogu P4752

    给定一个数字 A ,这个 A 由 a1,a2,...,aN 相乘得到. 给定一个数字 B ,这个 B 由 b1,b2,⋯,bM 相乘得到. 如果 A/B​ 是一个质数,请输出YES,否则输出NO. 输 ...

  9. [LUOGU] P1962 斐波那契数列

    求斐波那契第n项. [f(n-1) f(n)] * [0,1] = [f(n) f(n+1)] [1,1] 由此原理,根据矩阵乘法的结合律,用快速幂算出中间那个矩阵的n次方即可. 快速幂本质和普通快速 ...

  10. mysql alter修改数据库表结构用法

    1.alter操作表字段 (1)增加字段 alter table 表名 add 字段名 字段类型: alter table student add name varchar(10): (2)修改字段 ...