第十八章 DjangoWeb开发框架
第十八章 DjangoWeb开发框架
第一课 内容概要:
1.JS正则
-登录注册验证
2.组件
1.BootStrap
-css
-js
学习BootStrap规则
2.jQueryUI
-css
-js
学习jQueryUI规则
3.EasyUI
-css
-js
学习EasyUI规则
3.Web框架
4.Django(python功能最齐全的Web框架)
第二课 JS正则
1.test -判断字符串是否符合规定的正则
req=/\d+/;
req.test('adsfjogan66dfsa')
#ture
2.exec -获取匹配的数据
req=/\d+/
req.exec('adsfjogan66dfsa')
#["66", index: 9, input: "adsfjogan66dfsa"]
代码(浏览器控制台Console):
text='javascript is more fun than java or javabeans!'
var pattern=/\bjava\w*\b/;
pattern.exec(text);
#["javascript",]
var pattern=/\bjava(\w*)\b/;
pattern.exec(text);
#["javascript", "script"]
var pattern=/\bjava(\w*)\b/g;
pattern.exec(text);
#["javascript", "script"]
pattern.exec(text);
#["java", ""]
pattern.exec(text);
#["javabeans", "beans"]
pattern.exec(text);
#null
-登录注册验证(前端):
第三课 组件
EasyUI:
1.百度搜索EasyUI
2.导入jQuery和EasyUI到项目目录下
3.从EasyUI网站上挑选demo代码,进行复制
4.新建Html文件,将demo代码粘贴
5.将link路径:"https://www.jeasyui.com/easyui/themes/icon.css"
改为本地路径:"jquery-easyui-1.5.3/themes/default/easyui.css"
6.将<script>中的srcl路径,也改为本地的。
7.运行即可看到效果。
jQueryUI:
用法与EasyUI一样,由于集成度低,并没有得到广泛使用。
BootStrap:
最流行的组件,拥有很多模板。
1.响应式:基于@media
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1{
background-color: red;
height: 40px;
}
@media (min-width: 700px) { //宽度最小700px的情况下执行
.c2{
background-color: blue;
height: 40px;
}
}
</style>
</head>
<body>
<div class="c1 c2"></div>
</body>
</html>
2.图标 字体:基于@font-face
3.基本使用:
1.下载BootStrap,并引入项目中
2.新建Html文件,引入BootStrap的css路径:
<link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css">
<link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap-theme.css">
3.引入jQuery,再引入BootStrap的js路径:
<script src="jquery-3.2.1.js"></script>
<script src="bootstrap-3.3.7-dist/js/bootstrap.js"></script>
4.到BootStrap官网找到对应版本的示例,挑选需要功能赋值代码即可使用。
5.如果需要对示例中的组件进行修改,就在自定义的属性后面加上:!import
由此可见,在我们需要写一些前端功能的时候,比如轮播图,应该先去网上搜一下
看有没有相关插件,直接拿来使用,可以避免反复造轮子,提高工作效率。
第四课 Web框架
所有的web框架的本质:
import socket
def handle_request(client):
buf=client.recv(1024)
client.send(bytes('HTTP:/1.1 200 OK\r\n\r\n',encoding='utf8'))
client.send(bytes('Hello World!',encoding='utf8'))
def main():
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('127.0.0.1',8000))
sock.listen(5)
while True:
conn,address=sock.accept()
handle_request(conn)
conn.close()
if __name__ == '__main__':
main()
python中最基本的web框架:wsgiref模块(pyhton中web框架的本质)
from wsgiref.simple_server import make_server
def RunSever(environ,start_response):
# environ 用户发来的所有的数据
# start_response 封装要返回给用户的数据:响应头
start_response('200 OK',[('Content-Type','text/html')])
return ['hello world!'.encode('utf8')]# 返回的内容
if __name__ == '__main__':
httpd=make_server('',8000,RunSever)
print('Serving HTTP on port 8000...')
httpd.serve_forever()
字符串转字节的三种方式:
1.b'ffffff' (不能用于中文)
2.bytes('ffffff',encoding='utf8')
3.'ffffff'.encode('utf8')
MVC:
Model:数据库 View:模板文件 Controller:业务处理
MTV:(Django)
Model:数据库 Template:模板文件 view:业务处理
第五课 Django
Django目录:
mysite
-mysite #对整个程序进行配置
-init
-settings #配置文件
-urls #URL对应关系
-wsgi #遵循WSGI规范 以后会改用uwsgi+nginx
-manage.py #管理Django程序:
-python manage.py
-python manage.py startapp xxx
-pyhton manage.py makemigrations
-python manage.py migrate
创建app:
chouti
-主站 app
-后台管理 app
命令:
python3 manage.py startapp app名
app目录:
-migrations #数据操作记录
-admin #Django为我们提供的后台管理
-apps #配置当前app的(暂时用不到)
-models #ORM,写指定的类,通过命令可以创建数据库结构
-tests #单元测试
-views #业务代码
Django实现用户登录:
1.创建app名为cmdb(自定义随便起)
2.将medb名加入settings中的INSTALLED_APPS列表中
3.在urls文件中引入app下的views模块:
from cmdb import views
4.在urlpatterns列表中加入路径与关联函数:
path('login',views.login)
5.在Templates中新建一个Html文件login.html
<form action="/login" method="post">
<p>
<label for="uesername">用户名</label>
<input type="text" id="username" name="username">
</p>
<p>
<label for="pwd">密码</label>
<input type="password" id="pwd" name="pwd">
<span style="color: red">{{ 'error' }}</span>
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
6.到views中创建login函数:
def login(req):
return render(req,'login01.html')
7.在settings中的TEMPLATES列表中的 'DIRS'加入模板路径:
'DIRS': [os.path.join(BASE_DIR, 'templates')],
8.在项目文件夹下,为静态文件创建文件夹:static 导入css文件和js文件
9.配置静态文件路径,在settings中的最后加代码:
STATICFILES_DIRS=(os.path.join(BASE_DIR, 'static'),) #千万不要忘了加,
10.访问127.0.0.1:8000来到登录界面,点提交时会报403错误
11.将settings文件中的MIDDLEWARE内的第四行暂时注释掉,就不会有403错误了
12.用户验证:
将views代码修改为:
from django.shortcuts import render,redirect
# Create your views here.
def login(req):
error_msg=''
if req.method=='POST':#获取用户的提交方式
user=req.POST.get('username')#用get的方式获取键值,防止有空值报错
pwd=req.POST.get('pwd')
if user=='root' and pwd=='123':
return redirect('http://www.baidu.com')
else:
error_msg='用户名或密码不匹配'
return render(req,'login01.html',{'error':error_msg})
13.登录界面输入用户名:root 密码:123 点击提交,就跳转到了百度
用户名和密码如果有错误,就会提示:用户名或密码不匹配
实现前后端交互:
1.在Templates中新建一个Html文件home,写入代码:
<form action="home" method="post">
<input type="text" name="name" placeholder="姓名">
<input type="text" name="sex" placeholder="性别">
<input type="text" name="email" placeholder="邮箱">
<input type="submit" value="添加">
</form>
<div>
<table>
{% for row in userlist %}
<tr>
<td>{{ row.name }}</td>
<td>{{ row.sex }}</td>
<td>{{ row.email }}</td>
</tr>
{% endfor %}
</table>
</div>
2.在urlpatterns列表中加入路径与关联函数: path('home',views.home),
3.在views中加入代码:
userlist=[
{'name':'张三','sex':'男','email':'1110@163.com'},
{'name':'李四','sex':'男','email':'2220@163.com'},
{'name':'王五','sex':'男','email':'3333@163.com'},
]
def home(req):
if req.method=='POST':
user=req.POST.get('name')
sex=req.POST.get('sex')
email=req.POST.get('email')
temp={'name':user,'sex':sex,'email':email}
userlist.append(temp)
return render(req,'home.html',{'userlist':userlist})
4.访问127.0.0.1:8000/home 可以实现条件用户信息的功能
第六课 内容整理:
1.创建Django工程:
django-admin startproject 工程名
2.创建App:
cd 工程名
python manage.py startapp app名
3.静态文件:
project.settings.py
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
4.模板路径:
DIRS==>[os.path.join(BASE_DIR,'Template'),]
5.settings
middlerware
#注释csrf
6.定义路由规则:
urls.py
'login'-->函数名
7.定义视图函数:
app下的views.py
def func(req):
#req.method GET / POST
#http://127.0.0.1:8000/home?nid=123&name=alex....
#req.GET.get('',None) #获取请求发来的数据
#req.POST.get('',None)
#return HttpResponse('字符串')
#return render(req,'HTML模板路径')
#return redirect('/只能填url’)
8.模板渲染:
特殊的模板语言:
---{{变量名}}:
def func(req):
return render(req,'index.html',{'current_user'='张三'})
index.html
<html>
...
<body>
<div>{{current_user}}</div>
</body>
</html>
=====>最后生成的字符串:
<html>
...
<body>
<div>张三</div>
</body>
</html>
----for循环:
def func(req):
return render(req,'index.html',{'current_user'=['张三','李四','王五','小明']})
index.html
<html>
...
<body>
<ul>
{%for i in current_user%}
<li>{{i}}</li>
{{%endfor%}}
</ul>
</body>
</html>
----if else 可以与for循环配合使用,也可以嵌套。
{% if 条件%}
...
{%else%}
...
{%endif%}
第十八章 DjangoWeb开发框架的更多相关文章
- 《Linux内核设计与实现》读书笔记 第十八章 调试
第十八章调试 18.1 准备开始 需要准备的东西: l 一个bug:大部分bug通常都不是行为可靠而且定义明确的 l 一个藏匿bug的内核版本:找出bug首先出现的版本 l 相 ...
- Python之路【第十八章】:Django基础
Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...
- 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...
- 《Linux命令行与shell脚本编程大全》 第十八章 学习笔记
第十八章:初识sed和gawk 文本处理 sed编辑器 sed编辑器可以基于输入到命令行的或是存储在命令文本文件中的命令来处理数据流中的数据. 它每次读取一行,用提供的编辑器命令匹配数据.按命令中指定 ...
- Gradle 1.12用户指南翻译——第四十八章. Wrapper 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12 翻译——第十八章. 日志
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- Gradle 1.12用户指南翻译——第二十八章. Jetty 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十八章. Eclipse 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 《linux内核设计与实现》第十八章
第十八章 调试 调试工作艰难是内核级开发区别于用户级开发的一个显著特点. 一.准备开始 1.内和调试需要什么 一个bug(大部分bug通常都不是行为可靠而且定义明确的) 一个藏匿bug的内核版本(知道 ...
随机推荐
- 2017-06-22(locate shutdown half poweroff init0 reboot init 6)
locate locate 文件搜索命令 格式:locate [文件名] locate 在后台数据库中(/var/lib/mlocate/mlocate.db)按文件名搜索,速度快 刚刚新建的文件, ...
- 【Java框架型项目从入门到装逼】第十二节 项目分层
这一节我们开始对项目进行分层,一般来说,一个web项目的层次结构如下图所示: controller层为我们的控制层,用来接收用户的请求,比如新增一个学生的信息,新增的请求最先就是走到这一层.contr ...
- Linux实践篇--linux软件的安装,更新与卸载
本文出处:http://www.cnblogs.com/lhj588/archive/2012/07/17/2595328.html,感谢作者分享. Linux常见的安装为tar,zip,gz,rpm ...
- linux 安装icu库
先下载源码包并解压 然后安装 cd /icu/source ./configure --prefix=/usr/local/icu gmake make install
- msyql多软件连接
菜鸟一枚 使用mysql删除数据库时,习惯性使用navicat,由于使用的是sqlyog备份的,就用sqlyog恢复数据库,结果总是报错. 用同事电脑没有问题,后来发现是用了不同的软件,导致数据库数据 ...
- C# 类型基础(上)
C#类型都派生自System.Object 祖先的优良传统:Object的公共方法 Equals: 对象的同一性而非相等性 GetHashCode:返回对象的值的哈希码 ToString:默认返回类型 ...
- js和java中使用正则表达式校验邮箱
问题:经常在项目中要校验邮箱? 邮箱格式:首位必须为字母,必须包含一个@符号,并且@之后有个名字,之后还有个.,再有一个后缀名 例如:wyp55023@163.com 一.java中代码如下: Str ...
- python编码的那些事
字符串编码在python里是经常会遇到的问题,特别是写文件或是网络传输调用某些函数的时候. 现在来看看python中的unicode编码和utf-8编码 字符串编码的历史 计算机只能处理数字,文本转换 ...
- Django的admin.py注册流程
通常创建一个Django项目的时候,在Django的配置文件settings.py中,都会有下面的这段配置: INSTALLED_APPS = [ 'django.contrib.admin', 'd ...
- BZOJ 2005: [Noi2010]能量采集 [莫比乌斯反演]
题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为. ...