django 学习第二天
Posted xiaobai686
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django 学习第二天相关的知识,希望对你有一定的参考价值。
今日内容
一、Django
MVC和MTV框架
MVC
- controller:路由分发 用urls里面放置不同路径 执行不同函数
- model 数据库信xi
- view #views 逻辑相关里面,写函数,里面写数据
MTV
- M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
- T 代表模板 (Template):负责如何把页面展示给用户(html)。
- V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template
Django下载
下载安装
pip3 install
django==1.11.9创建项目
django-admin startproject mysite ? 创建了一个名为"mysite"的Django 项目
创建的项目文件介绍
manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库,启动关闭项目与 项目交互 等,不管你将框架分了几个文件,必然有一个启动文件,其实他们本身就是一个文件。
settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py ----- 负责把URL模式映射到应用程序。
二、项目
1.创建项目
2.创建app
urls.py
注意事项
- url(r‘^books/(d{4})/$‘, views.index)
- 第一个参数:路径正则字符串
- 第二个参数:对应的视图函数
这个文件里面放url的路径,和对应的执行函数
from django.conf.urls import url from django.contrib import admin from app01 import views ##从app中导入对应的视图函数 urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^books/(d{4})/$', views.year_books), #多路径的情况,用正则匹配
views.py 写逻辑视图
这里面写url匹配的路径对应的函数关系
from django.shortcuts import render,HttpResponse # Create your views here. def index(request): print(request.method) #'POST' 'GET' if request.method == 'GET': return render(request,'login.html') ##返回的是html页面 else: # print(request.GET) print(request.POST) username = request.POST.get('username') password = request.POST.get('password') if username == 'dazhuang' and password == '123': return HttpResponse('登录成功!') else: return HttpResponse('登录失败!') ##返回的是字符串
在templates里面创建html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <from act="/index/" method="get"> <input type="text" name="username"> <input type="text" name="password"> <input type="submit" value="提交"> </from> </body> </html>
3.正则表达式的匹配
3.1匹配特点
- 贪婪匹配:它会在它允许的范围内取最长的结果
- 非贪婪匹配/惰性匹配:在量词后面加上?
- .*?x 匹配任意非换行符字符任意长度,直到遇到x就停止
- 转义 // 两个转义/表示变成普通/
3.2元字符
- w 匹配数字字母下划线
- d 匹配所有数字
- s 匹配所有空白符 换行符、制表符、空格、space
- 匹配换行符
- 匹配制表符
- ^ 匹配一个字符串的开始
- $ 结束
- 利用 ^ $ 可以实现 判定某个字符串是否完全符合标准
3.3匹配规则
. 表示匹配 除含航服之外的所有字符
[^] 只要不出现在中括号中的内容都可以被匹配
# 有一些有特殊意义的元字符进入字符组中会回复它本来的意义 # . | [ ] ( )
a|b 或 符合a规则的或者符合b规则的都可被匹配 #如果a规则是b规则的一部分,且a规则比b规则要苛刻,就把a规则写在前面
() 分组 表示给几个字符加上量词蕨属的需求的时候,就给这些量词分在一个组
3.4量词
{n} 表示这个量词之前的字符出现n次
{n,} 表示这个量词之前的字符至少出现n次
{n,m} 表示这个凉席之前的字符出现n-m次
? 表示匹配量词之前的字符出现 0 次或者 1次
+ 表示匹配量词之前的字符出现 1 次或者 多次
* 表示匹配量词之前的字符出现 0 次或者 多次
三、url配置
1.配置
基本格式: urlpatterns = [url(正则表达式,views视图函数,参数,别名)]
- 正则表达式:一个正则表达式字符串
- views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
- 参数:可选的要传递给视图函数的默认参数(字典形式)
- 别名:一个可选的name参数
2.无名分组
url(r'^books/(d{4})/', views.books)
位置参数
url(r'^books/(d{4})/', views.year_books), #匹配年份的 ? url(r'^books/(d{4})/(d{1,2})/', views.year_month_books), #匹配年份和月份的 # http://127.0.0.1:8000/books/2001/
视图: ? def year_month_books(request,year,month): #位置参数,第一个参数接收的就是无名分组路径中匹配 到的第一个分组的数据,第二个参数接收的就是无名分组路径中匹配到的第二个分组的数据 print(year,month) ? ? ? ? ? # return render(request,'books.html') ? ? ? ? ?
3.有名参数
形参名称要和url中的分组名对应好,参数位置就没有要求了
? url(r'^books/(?P<year>d{4})/(?P<month>d{1,2})/', views.year_month_books), #匹配年份和月 份的 ? ? ? ? ? def year_month_books(request,month,year): #形参名称要和url中的分组名对应好,参数位置就没有要求了 ? ? ? ? print(year,month)? ? ?return HttpResponse(year+month)
4.默认值
默认值,可以减少代码量
# urls.py中 from django.conf.urls import url from.import views urlpatterns = [ ? url(r'^blog/$', views.page), ? url(r'^blog/page(?P<num>[0-9]+)/$', views.page), ] # views.py中,可以为num指定默认值 def page(request, num="1"): ? pass
以上是关于django 学习第二天的主要内容,如果未能解决你的问题,请参考以下文章