django基础
1. 路由系统
1.1 格式介绍
''' urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说明: 一个正则表达式字符串 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 可选的要传递给视图函数的默认参数(字典形式) 一个可选的name参数 '''
1.2 匹配开头结束
正则表达式:
- 以**开头,利用^,例如:url(r'^index/', views.index),
- 以**结尾,利用$,例如:url(r'index/$', views.index),
- 通过域名进行访问,显示默认首页,例如:url(r'^$', views.index),
1.3 无名分组
url(r'^bbs/article/(\d+)/$',views.article_year), url(r'^bbs/article/(\d+)/(\d+)$',views.article_yearMonth), def article_year(request,year): pass def article_yearMonth(request,year,month): pass
1.4 有名分组
在Python 正则表达式中,命名正则表达式组的语法是(?P<name>pattern),其中name 是组的名称,pattern 是要匹配的模式。
url(r'^bbs/article/(?P<year_id>\d+)/(?P<month_id>\d+)$',views.article_yearMonth), def article_yearMonth(request,month_id,year_id): pass
1.5 路由分发
#Including another URLconf # 1. Import the include() function: from django.conf.urls import url, include # 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) from django.conf.urls import include, url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^blog/', include('blog.urls')), ]
1.6 反向地址解析
利用别名,进行地址反向解析
是在render方法中,进行反向解析的
1.7 Response
Httpresponse() 返回字符串 render(request,template_name,context) 结合一个给定的摸版和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象 参数说明: 1.request:用于生产响应的请求对象 2.template_name:要使用的模板的完整名称,可选参数 3.context:添加到模板上下文的一个字典,默认是一个空字典。例如字典中的某个值是可调用的,视图将在渲染模板之前调用 4.content_type:生成的文档要使用的MIME类型。默认为DEFAULT_CONTENT_TYPE设置的值 5.status:响应的状态码。默认为200 redirect(跳转,重定向) redirct("/路径/") 模拟用户点击submit请求: 请求url:http://127.0.0.1:8000/login/ 1.请求url:/login/ POST 2.url(r'^login/',app01_views.login,name="login") 3.login(request):验证, if 成功,redirect("/index/") 重定向请求 请求路径:http://127.0.0.1:8000/index/ 1.请求url:/index/ GET 2.url(r'^index/',app01_views.index,name="index") 3.index(request):取出数据库数据,渲染到index.html页面 用户看到的是:渲染的index.html页面 redirect与render的区别: redirct发出两次请求 render发出一次请求
2. template(模板层)
模板语言:将具体数据嵌入到前端模板的语言
2.1 模板语言之变量
语法:
{{ value }}
<h4>{{s}}</h4> <h4>列表:{{ l.0 }}</h4> <h4>列表:{{ l.2 }}</h4> <h4>字典:{{ dic.name }}</h4> <h4>日期:{{ date.year }}</h4> <h4>类对象列表:{{ person_list.0.name }}</h4>
注意:句点符也可以用来引用对象的方法(无参数方法)。
2.2 模板之过滤器
语法:
{{obj|filter__name:param}}
1.default
一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:
{{ value|default:"nothing" }}
2.length
返回值的长度。它对字符串和列表都起作用。例如:
{{ value|length }}
如果 value 是 ['a', 'b', 'c', 'd'],那么输出是 4。
3.filesizeformat
将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:
{{ value|filesizeformat }}
如果 value 是 123456789,输出将会是 117.7 MB。
4.date
如果 value=datetime.datetime.now()
{{ value|date:"Y-m-d" }}
5.slice
如果 value="hello world"
{{ value|slice:"2:-1" }}
6.truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
参数:要截断的字符数
例如:
{{ value|truncatechars:9 }}
7.safe
Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。例如:
value="<a href="">点击</a>"
{{ value|safe}}
3. Model
ORM是数据库表与类的映射关系
映射关系:
表名 <-------> 类名
字段 <-------> 属性
表记录 <-------> 类实例对象
通过logging可以查看翻译成的sql语句
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
3.1 查询
查询所有
bookList = models.Book.objects.all()
进行模糊查询
bookList = models.Book.objects.filter(title__contains=keyword)
3.2 增加
方式一:
models.Book.objects.create(title=title,pubDate=pubdate)
方式二:
book_obj = Book(title="西游记", pubdate=pubdate) book_obj.save()
3.3 删除
models.Book.objects.filter(id=id).delete()
3.4 编辑
models.Book.objects.filter(id=id).update(title=title,pubdate=pubdate)
3.5 列表序号
{% for book_obj in bookList %} <tr> <td>{{ forloop.counter }}</td> <td>{{ book_obj.title }}</td> <td>{{ book_obj.pubDate|date:"Y-m-d" }}</td> <td>{{ book_obj.price }}</td> <td>{{ book_obj.publish }}</td> <td> <a href="/edit/{{ book_obj.id }}"><button class="btn btn-info">编辑</button></a> <a href="/del/{{ book_obj.id }}"><button class="btn btn-danger">删除</button></a> </td> </tr> {% endfor %}