jinja2去数据库中获取数据,传递给HTML页面 ,借助于模板语法 发送给浏览器 还能帮你简单方便的操作字典
去后端获取数据库中数据展示到前端页面
import pymysql def get_user(env):去数据库中获取数据,传递给HTML页面 ,借助于模板语法 发送给浏览器 还能帮你简单方便的操作字典 conn=pymysql.connect( host='127.0.0.1', post=3306, user='root', password='admin123', bd='day59',表名 charset='utf8', autocommit=Turn ) cursor=conn.cursor(cursor=pymysql.cursors.cursors.DictCursor)拿到的是字典 sql='select * frome userinfo' affect_rows=cursor.execute(sql) 返回值是这个操作所影响的函数 data_list=cursor.fetchall() #[{},{},{}] #接下来应该将获取到的数据传给HTML文件 所以要创建文件 with open(r'templates/05get_data.html','r',encoding='utf-8') tmp=Template(data) res=tmp.render(user_list=data_list) 这部分是将列表套字典都传给了HTML文件 #给get_dict.html传递了一个值 页面上通过变量名user就能拿到user_dict return res if __name__=='__main__': get_user(111)View Code
05get_data.html
<body> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> <h1 class="text-center">用户数据</h1> 效果居中 <table class="table table-hovar table-striped"> <thead> <tr> <th>ID</th> <th>username</th> <th>password</th> <th>hobby</th> </tr> </thead> <tbody> {% for user_dict in user_list %} for循环 也是模板语法 <tr> <td>{{user_dict.id}}</td> <td>{{user_dict.username}}</td> <td>{{user_dict.password}}</td> <td>{{user_dict.hobby}}</td> </tr> {% endfor%} </tbody> </table> </div> </div> </div> <div></div> </body> 即可再浏览器查看表格并且是实时网页 删除数据库一项数据刷新后网页同步View Code
手写
1.socket代码需要我们自己写
2.http格式的数据自己处理(只能拿到用户辅入的路由)
·基于wsgire/模块
1.帮助你封装了socket代码
2.帮你处理http格式的数据(大字典)
wbe服务网关接口
1.请求来的时候帮助你自动拆分http格式数据并封装成非常方便处理的数据格式
2.响应走的时候帮你将数据再打包成符合http格式
根据功能的不同拆分成不同py文件(关键)
urls.py
路由与视图函数对应关系
views.py 业务逻辑的视图函数
templates模版文件夹
存储html文件
拆分完成后 后续想要添加功能 只需要在 urls.py中和views.py中书写对应的代码即可
例子二:views.py:
import datetime
def get_time(env):
current_time=datetime.datetime.now().strftime('%Y-%m-%d-%X')
#如何将后端获取到的睡传递给HTML文件?
with open(r'templates/03 mytime.html','r',encodeing='utf-8')as f:
data=f.read()
#data就是一堆字符串
data=data.replace('hkwfnknfk',current_time) #再后端将HTML页面处理好之后再返回给前端
return data
from jinja2 import Template
def get_dict(wnv):
user_dic={'username':'zhu':'age':18','hobby':study}
with open(r'teplates/04 get_dict.html','r',encoding='utf-8')as f:
data=f.read()
tmp=Template(data)
res=tmp.render(user=user_dic)
#给get_dict.html传递了一个值 页面上通过变量名user就能拿到user_dict
return res
路由与视图函数:
from views import *
urls=[('/index',index),
('/login',login),
('/xxx',xxx),
('/get_time',get_time),
('/get_dict',get_dict)
]
04 get_dict.html:
<body>
<h1>我是一个页面</h1>
{{user}}取整个字典 模板语法 非常贴近Python语法 是再后端起作用的
{{user.get('username')}}字典取单个值的三种方式
{{user.age}}
{{user['hobby']}}
</body>
简易版本web框架流程图
wsgiret模块
1.请求来的时候解析HTTP格式的数据 封装成大字典
2.响应走的时候给数据达成成符合HTTP格式 再返回给浏览器
Python三大主流框架
1.django 特点:大而全 自带的功能特别特别特别多 类似于航空母舰 不足:有时候过于笨重
2.flask 特点:小而精 自带的功能特别少 类似于游骑兵 第三方的模块特别多 如果将flask第三方的模块加起来完全可以盖过django 并且也越来越像django 不足:比较依赖于第三方
3.tornado 特点:异步非阻塞 支持高并发 牛逼到甚至可以开发游戏服务器
不足:暂时不会
A.socket部分
B.路由与视图函数对应关系(路由匹配)
C.模板语法
django:A用的是别人的 wsgiref模块 B用的是自己的 C用的是自己的(没有jinja2好用 但是也很方便)
flask A用的是别人的 Werkzeug(内部还是wsgiref模块 B自己写的 C用的别人的(jinja2)
tornado ABC全都是自己写的 异步这些全都是自己写的
注意事项
#如何让你的计算机能够正常启动django项目?
1.计算机的名称不能有中文
2.一个Python窗口只开一个项目
3.项目里面所有的文件也尽量不要出现中文
4.Python解释器尽量使用3.4-3.6之间的版本
(如果满足以上条件你的项目报错 你点击最后一个报错信息 去源码中把逗号删掉即可)
#django版本问题
1..x 2.x 3.x(直接忽略)
1.x 和2.x本身差距也不大 我们讲解主要以1.x为例 会讲解2.x区别 公司之前用的1.8 慢慢过渡到了1.11版本 有一些项目用的2.0
#django安装
pip3 install django==1.11.11 在Python中 设置里找jango 不要直接安装 需要选择1.11.11版本再安装
如果已经安装了其他版本 无需自己卸载 直接重新装会自动卸载安装新的
验证是否成功的方式一:终端输入django-damin看看有没有反应
django基本操作
一、#命令行操作
1.创建django项目
你可以先切换到对应的盘如何再创建
django-damin startproject mysite(项目名) #创建好之后应该是在c盘下 例如:django-admin startproject mydjangoproject
创建好以后搜索django出来是这样的:
mysite文件夹
manage.py
mysite文件夹
__init__.py
settings.py
urls.py
wsgi.py
2.启动django项目
创建好之后一定要先切到项目目录下:cd/mysite
通过manage.py启动再terminal中敲
命令行启动①
python3 manage.py runserver http://127.0.0.1:8000 #django端口号是8000
或者
python3 manage.py runserver 8080默认是监听本机127.0.0.1
(别人访问不到的方式),以后再项目上线时用0.0.0.0的比较多 ctrl+c是停止
pycharm启动② 右上角 点开写项目名 监听端口号 监听地址 ✓上中间第一个
django中默认情况下socket用的是wsgiref(自己写的web框架)
3.创建应用app
Python3 manage.py startapp app01(APP的名字,需要见名知意)
应用:django是一款专门用来开发APP的web框架,不是手机的那种APP,django框架类似于是一所大学,APP就类似于大学里面的各个学院,一个APP就是一个独立的功能模块
停掉:shift+c
4.创建的应用一定要去配置文件中注册 创建出来的应用第一步先去配置文件中注册 其他的先不要做 在settings.py 配置文件中 找到INSTALLED_APPS=.....中增加'app01.apps.App01Config'(全写)或者'app02'(简写)
ps:你在用pycharm创建项目的时候 pycharm可以帮你创建一个APP并且自动注册
主要文件介绍
--mysite 项目文件夹
--mysite 文件夹
--settings.py 配置文件
--tests.py测试相关 不用管
--wsgi.py wsgiref模块(不考虑)
--manage.py django的入口文件
--db.sqlite3 django 自带的sqlite3数据库(小型数据库 功能不是很多还有bug)
-day 60 项目名
--app01 文件夹app的名字
--admin.py django后台管理
--apps.py 注册使用
--migrations 文件夹 数据库迁移记录
--wsgi.py wsgi服务器的配置,以后上线了才改
--models.py 数据库相关的 模型类(orm)
--urls.py 路由与视图函数对应关系(路由层)
--views.py视图函数 重点
--templates 模板文件
--manage.py 启动项目创建app 各种命令的操作都跟他有关
二、#pycharm操作
pycharm操作
1.new project 选择左侧第二个django即可(在安装django后之后 且关闭了其他django)
2.启动
1.还是用命令行启动
2.点击绿色小箭头即可
3.创建应用
1.pycharm提供的终端直接输入完整命令:Python3 manage.py startapp app01(APP的名字,需要见名知意)
2.pycharm tools run manage.py task提示(输入startapp app01 前期不建议使用)
4.改端口号:点击Edi Canli...... 修改为8008 点击Appty ok
创建server edit confl......
命令行与pycharm创建的区别
1.命令行创建不会自动有templatew文件 需要你自己手动创建而pycharm会自动帮你创建并且还会自动在配置文件中配置对应的路径
#pycharm创建
TCMPLATES=[
{
'BACKEND':'django.template.backends.django.DjangoTemplates',
'DIRS':[os.path.join(BASE_DIR,'templates')]
}
#命令行创建
TEMPLATES=[
{
'BACKEND':'django.template.backends.django.DjangoTemplates',
'DIRS':[],
]
对比之下 命令行创建少了一部分 也就意思为你在用命令行创建django项目的时候不单单需要创建templates文件夹还需要去配置文件中配置路径:'DIRS':[os.path.join(BASE_DIR,'templates')]
django小白必会三板斧
导入:from django.shortcuts import HttpResponse,render,redirect
HttpResponse 返回字符串类型的数据
例如:
def index(request):
#param request:请求相关的所有数据对象 比你之前的env更加牛
#return:
return HttpResponse("你好啊 我是django")
render 返回html文件的
return render(request,'myfirst.html') #自动去tempaltes文件夹下帮你查找文件 前 提是有添加到配置文件中
例如:
def index(request):
username_dict={'username':'zhu','age':18}#视图函数必须要要接受一个形参request
#第一种传值方式
return render(request,'传值的目的文件01 ab-render.html',{'data':user_dict,'data':123})
就是将user_dict传给ab_render页面 页面上通过data就能拿到字典数据
#第二种方式:当你要传的数据特别多的时候
def index(request):
username_dict={'username':'zhu','age':18}
return render(request,'01 ab_render.html',locals())
Locals会将所在的名称空间中所有的名字全部传递给HTML页面
redirect 重定向
return redirect('http://www.baidu.com/') 其他url需要写全
retunrn redirect('/home/')自己的不用写ip和端口
配置文件讲解:
路由简单入门:
1.地址和视图函数的映射关系---urls.py文件
urlpatterns列表
2.现阶段使用
复制一行 改一下第一个参数(正则表达式),第二个参数是视图函数内存地址(需要导入相对应的文件信息例如:from app01 import views)
一、视图函数
request必须传,约定俗称都用request
request是个对象,请求的对象,请求过来是符合HTTP请求协议的数据包(字符串)
视图函数一般是写在views.py下(可以不放在里面 )
def index(request):
return HttpResponse('ok')
1. 通过print(request.method) 来判断请求是post还是get请求
例如:
def index(request):
print(request.method)
return HttpResponse('ok')
2.请求参数 get请求这种形式:http://127.0.0.1/index?name=zz&age=18
print(request.GET) 也可以把他当成字典
#print(request.GET.get('name'))
#print(request.GET.['name']) 可能会报错推荐使用上一个
#print(request.GET.get('age'))
3.post形成提交的数据(数据放在请求体中 ,body体)
print(request.POST) 把它结果当成字典
二、视图函数之响应对象
三件套:
1.HTTPResponse:返回字符串形式
2.返回模板文件:render 本质是函数 函数返回值还是HTTPReponse的对象
3.重定向:redirect
静态文件配置static
1.js.css这些静态文件
2.需要在setting中配置
3.使用步骤
1. 先在项目根路径下 创建static再在setting.py中配置
#静态文件配置相关
STATIC_URL='/static/'
#再配一个STATICFILES_DIRS=列表(列表内写路径),单词一个字母都不能错
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
2.在static中新建img,js,css文件夹以后相应的目录方相应的目录
3.在模板中最上面引入使用
src="/static/js/jquery.min.js"
路由配置:
urls.py里面开路由写:urlpatterns=[
urls(r'^login',views.login)]
视图:
请求对象
request.method------->get post
request.GET当作字典来用
功能串联版登录小案例:
先应该弄一个登录页面 需要视图函数返回这个页面,所以需要把这个模板返回,配路由
urls.py里面开路由写:urlpatterns=[
urls=[(r^login/',views.login),
]
去views里面写一个login的函数: 注意views有几个记得改123
def login(request):
reyurn render(request,'login.html') 来个静态页面,先创建login.html再写进来
去造一个login的页面:templates(应该是这个文件夹)文件夹下login.html
login.html:
<link rel="stylesheet"href="/static/bootstrap/css/bootstrap.css">
<div class="row">
<div class="col-md-6 col-md-offset-3"></div>
<h1 class="text-center">登录功能</h1># 类似居中两侧留白
<form action=" "method="post"> # 这里一定要写post不然密码全看见了
<div class="form-group">
<label for="">用户名:</label>
<input type="text" name="name" class="form-control">
</div>
<div class="form-group">
<label for="">密码:</label>
<input type="password" name="password" class="form-control">
</div>
<div class="text-center">
<input type="tsxt" value="登录" class="btn btn-success">
</div>
<br>#换行
</form >
</div>
但是效果不太好看 所有需要用bootstrap一堆样式(中文文档下载 最左边下载)
放在静态文件里面,整个copy 放在sttatic里面 已整个放就行不需要分开放在CSS js里面
引入bootstrap写在登录功能的上面,这样就能写入样式进去变的好看
但是这样还提交不上去 ,要去配置文件里面注释 sttinge.py MIDDLEWARE=[
]把这个注释掉,提交上去以后被login函数收到
再来app.py里面补全:
def login(request):
if request.method=='GET':
return render(request,'login.html')
else:
name=request.POST.get('name')
password=request.POST.get('pssword')
print(name)
print(password)
if name=='zhu' and password=='123:
#return redirect('http://www.baidu.com')重定向,用之前要导入redirect
#如果想重定向到下面的index函数的那个页面:
return redirect('/index')#括号里面就写去的那个路由名,前面加个/
else:
retunrn HttpResponse('用户名或者密码错误') 返回文本,用之前要导入HttpResponse
def index(request):
return request,'index2.html'需要去urls里面配路由加上,再新开一个index2.html,写一个页面
或者去copy一个,记得加样式 静态
根据文件名更改路径名
模板:index文件内
模板二:
标签:get,py,request,django,html,jinja2,user,模板 From: https://www.cnblogs.com/97zs/p/17816702.html