首页 > 其他分享 >jinja2模块模板语法 django基础

jinja2模块模板语法 django基础

时间:2024-03-14 21:57:27浏览次数:22  
标签:get py request django html jinja2 user 模板

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

相关文章

  • C++函数模板的实参推断
    C++模板在使用类模板创建对象时,程序员需要显式的指明实参(也就是具体的类型)。例如对于下面的Point类:template<typename T1, typename T2> class Point;我们可以在栈上创建对象,也可以在堆上创建对象:Point<int, int> p1(10, 20);  //在栈上创建对象Point<char*, c......
  • 使用Dockerfile构建一个django项目
    公司使用docker流程(以图书管理系统为例)第一步:有一个项目,pycharm开发着,开发完后第二步:在项目路径下新建Dockerfile,写入FROMpython:3.9MAINTAINERzengWORKDIR/softCOPY./requirements.txt/soft/requirements.txtRUNpipinstall-rrequirements.txt-ihttps://pypi.d......
  • 线段树模板
    线段树模板沉淀了很久,总算是掌握了线段树的经典模板了。但是还是需要深刻练习才能反复加深印象呢//线段树模板#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;intans[N*4];intt1[N*4],t2[N*4];inta[N];//存放输入数据intn,......
  • C++函数模板的重载
    C++模板当需要对不同的类型使用同一种算法(同一个函数体)时,为了避免定义多个功能重复的函数,可以使用模板。然而,并非所有的类型都使用同一种算法,有些特定的类型需要单独处理,为了满足这种需求,C++允许对函数模板进行重载,程序员可以像重载常规函数那样重载模板定义。我们定义了Swap(......
  • 滑动窗口模板
    /*滑动窗口算法框架*/voidslidingWindow(Strings){//用合适的数据结构记录窗口中的数据HashMap<Character,Integer>window=newHashMap<>();intleft=0,right=0;while(right<s.length()){//c是将移入窗口的字符char......
  • django安装项目 app流程
    #django版本问题 1..x 2.x   3.x(直接忽略)1.x和2.x本身差距也不大 我们讲解主要以1.x为例会讲解2.x区别公司之前用的1.8慢慢过渡到了1.11版本有一些项目用的2.0#django安装pip3installdjango==1.11.11 在Python中设置里找jango不要直接安装需要选......
  • 模板匹配——determine_shape_model_params
    determine_shape_model_params—Determinetheparametersofashapemodel.模版匹配参数确定 determine_shape_model_paramsdeterminescertainparametersofashapemodelautomaticallyfromthemodelimageTemplate.Theparameterstobedeterminedcanbesp......
  • 模板匹配——create_shape_model
    Theoperatorcreate_shape_modelpreparesatemplate,whichispassedintheimageTemplate,asashapemodelusedformatching.TheROIofthemodelispassedasthedomainofTemplate.运算符create_shape_model准备一个模板,该模板在图像模板中传递,作为用于匹配的......
  • 基于Django(python+sql)的校园二手交易系统设计与实现(完整程序+开题报告+论文)
    摘要        随着互联网的迅猛发展,校园内的二手交易市场也逐渐呈现出蓬勃的发展态势。学生们在校园生活中会产生大量的闲置物品,而其他学生也有可能需要这些物品。本论文研究了校园二手交易系统的需求分析、系统实现和测试三个部分,旨在提高校园二手交易系统的开发和测......
  • cmake 模板
    目录一、cmake模板二、参数设置三、命令解释3.1find命令3.2file执行与文件和目录相关的操作3.3自定义命令3.4配置文件四、自动化测试五、安装5.1Linux的rpath机制5.2CMAKE_INSTALL_RPATH的使用案例5.3CMAKE_BUILD_RPATH的使用案例六、闭源包引用七、vcpkg包管理6.1安装6.......