Django之初

  Django的开始:

#安装Django:
pip3 install django #创建Django项目:
django-admin startproject 项目名
比如:
django-admin startproject mystie #启动socket服务端,等待用户发送请求
python manage.py runserver 127.0.0.1:8080

  Django的创建APP:

>>:django-admin startproject mysite
#创建django项目
>>:cd mysite
#切换到mysite项目路径下
>>mysite:python manage.py startapp app01
#创建项目里的应用路径 ###具体应用在路由系统里使用。不同的功能,用不同的App。

  Django的目录结构:

mysite项目名
mysite(项目同名文件夹)
- settings.py #Django配置文件
- url.py # 路由系统:url->函数
- wsgi.py #web服务网关接口,用于定义Django用socket, wsgiref(默认的),uwsgi(生产环境中用的)
  #存放页面的文件夹
  templates
  
  #静态文件夹
  static
  #对当前Django程序所有操作可以基于 python manage.py runserver manage.py

  Django的静态文件配置:

- 静态文件路径
static目录
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)

Requset:用户请求的所有信息

GET请求:只有requset.get 有值

POST请求:requset.get 和 requset.post 都可以取值(get是请求头里url取值,post是请求体里取值)

redirect:要跳转的url

  Django模板配置

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

Django的url演示:

  在django中,要函数返回固定结果时,用HttpResponse,HttpResponse只写字符串。

  需要导入 django.shortcuts 模块

  在django中,每个函数都要有request参数。因为request参数里有用户的请求相关所有信息。并且request是对象的形式存在。

  导入 django.shortcuts 模块中的 render 。可以返回页面给用户

  render的第一个参数必须是request,第二个参数是需要跳转的页面。

导入静态样式:

  在每个函数的第一个参数都是request,因为request里请求的所有信息,包括请求方式,是get还是post。所以,可以request.method来获取请求的方式结果。

  判断是GET还是POST请求,并返回指定的页面,比如图中的login.html

  而在前端,也可以设置用什么样的方式进行提交。如果是POST,还可以往action里提交,可以在action里在设置一个url,那样的话,POST会再发一次请求。发的请求会根据url去路由中去匹配。匹配到就会执行url对应的函数。

  如图的method="POST" action="/login/"   这样的话,post请求会再发一个请求,去url中找到响应的url。并执行url对应的函数。

  但是,这一次的请求就由get,改为了post。

  既然请求已经改为post,那么在login函数中的 if 判断就不会走GET了,而应该 else 去找POST。

  拿到的是一个字典类型的数据集。

<QueryDict: {'username': ['yanyan1314'], 'password': ['adfasd ']}>

  而既然POST请求体里有数据,那怎么取来哩。

  就这样取:

  但是本人不建议,因为 [ ] 里的字符串一变,就找不着了。

  

  所以,要用get的方法,很想字典取值的样子。这样的好处是,前端页面提交的数据,比如说没有username,他不会报错,而是提交一个None

  用redirect方法,进行重定向,来实现跳转。旋转跳跃。

 def login(request):
"""
处理用户请求,并返回内容
:param request: 用户请求的相关的所有信息(对象)
:return:
"""
#通过请求方式,返回不同的信息
if request.method == "GET":
return render(request,"login.html")
else:
print(request.POST) #用户POST提交的数据,(请求体里的数据)
username = request.POST.get("username") #取出字典里的数据。
password = request.POST.get("password") #取出字典里的数据。
if username == "yanyan" and password == "":
# 可以用 redirect 重定向,跳转到指定页面。
return redirect("http://www.baidu.com")
else:
#登录失败
return render(request,"login.html")

  在登录中,用户名或密码错误,怎么报错哩?

  铛铛铛铛:

  在前端的login中加 { { msg } } , 这个特殊字符走的是if request.method == "GET" 这一行,但是要加在else里的登录失败的地方。所以在return中设置。在render中加第三的参数,是字典的形式。

  login 函数:

 from django.shortcuts import HttpResponse,render,redirect

 def login(request):
"""
处理用户请求,并返回内容
:param request: 用户请求的相关的所有信息(对象)
:return:
"""
#通过请求方式,返回不同的信息
if request.method == "GET":
return render(request,"login.html")
else:
print(request.POST) #用户POST提交的数据,(请求体里的数据)
username = request.POST.get("username") #取出字典里的数据。
password = request.POST.get("password") #取出字典里的数据。
if username == "yanyan" and password == "":
# 可以用 redirect 重定向,跳转到指定页面。
return redirect("http://www.baidu.com")
else:
#登录失败
return render(request,"login.html",{"msg":"username or password is error"})

  login.html 页面:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" href="/static/commons.css" />
</head>
<body>
<h1>Login</h1>
<form method="POST" action="/login/">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="Login">
{{ msg }}
</form>
</body>
</html>

  在url中传的之,是可以通过request.GET 获取到的。 

POST请求和GET请求的区别:GET请求只有request.GET 的url中有值。在GET到头里有值,体里没值。

              POST请求在request.POST和POST的请求体里都有值。

如果在后端的render中的{{msg}}中有列表数据:那么在前端如何呈现我想要的列表索引数据:

 def index(request):
"""
处理用户请求,并返回内容
:param request: 用户请求的相关的所有信息(对象)
:return:
"""
return render(
request,
"index.html",
{
"name":"george",
"users":["hhhhhhhhhhh","aaaaaaaaa"],
}
)

页面效果:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>index</h1>
<h1>模板标记</h1>
<p>{{ name }}</p>
<p>{{ users.0 }}</p> #就用 “.” 的形式取索引。
<p>{{ users.1 }}</p> </body>
</html>

结果:

  那既然列表可取,字典该当如何取值啦~:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>index</h1>
<h1>模板标记</h1>
<p>{{ name }}</p>
<p>{{ users.0 }}</p>
<p>{{ users.1 }}</p>
<p>{{ user_dict.k1 }}</p>
<p>{{ user_dict.k2 }}</p> </body>
</html>

结果:

不仅仅是字典可以,还可以循环呢!循环列表里的字典

  惊不惊讶,意不意外:

index 函数:

 def index(request):
"""
处理用户请求,并返回内容
:param request: 用户请求的相关的所有信息(对象)
:return:
"""
return render(
request,
"index.html",
{
"name":"george",
"users":["hhhhhhhhhhh","aaaaaaaaa"],
"user_dict":{"k1":"v1","k2":"v2"},
'user_list_dict': [
{'id': 1, 'name': 'George', 'email': 'George@163.com'},
{'id': 2, 'name': 'George2', 'email': 'George@1632.com'},
{'id': 3, 'name': 'George3', 'email': 'George@1632.com'},
]
}
)

index.html 页面:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>index</h1>
<h1>模板标记</h1>
<p>{{ name }}</p>
<p>{{ users.0 }}</p>
<p>{{ users.1 }}</p>
<p>{{ user_dict.k1 }}</p>
<p>{{ user_dict.k2 }}</p>
<h3>循环</h3>
{% for item in users %} #循环的开头
{{ item }} #每个item,就是每个循环的元素
<h1>{{ item }}</h1> #每个item,就是每个循环的元素
{% endfor %} #循环的结尾
<ul>
{% for foo in users %}
<li>{{ foo }}</li>
{% endfor %}
</ul>
<h1>列表里的字典</h1>
<ul>
{% for foo in user_list_dict %}
<li>{{ foo.id }} === {{ foo.name }} === {{ foo.email }}</li>
{% endfor %} </ul> </body>
</html>

Django之初的更多相关文章

  1. Django框架初入

    一.Django 特性 数据库功能强大(利用python的类继承,几行代码就可以实现一个动态的数据库操作接口(API)) 强大的后台功能 优雅的网址(正则匹配网址,传递到对应函数) 模板与缓存系统 二 ...

  2. Django 代码初体验

    其实Django中的代码逻辑就是和我们以前所学的一些项目差不多 就是 解耦.解耦.解耦 创建过后的Django文件 其中的day68是你的 项目的名字的相同的一个自动生成的文件里面都是放置配置文件类似 ...

  3. Django框架初体验

    前言 从今天开始学习测试开发知识,并会把每一次学习的过程和成果记录到博客,由于我也没怎么接触过python相关的开发框架,所以前期应该是艰难的,但是我相信努力就会有收获,如果你和我一样是个小白,那我们 ...

  4. django之初建项目

    一.项目预览 1.在创建项目之前,必须先进入虚拟环境,因为我们的包安装在我们的虚拟环境中,不在我们的中环境中 >>> ./venv/Scripts/activate 2.创建一个项目 ...

  5. Django是Python下的一款网络服务器框架

    被解放的姜戈01 初试天涯   Django是Python下的一款网络服务器框架.Python下有许多款不同的框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django ...

  6. 框架之---Django

    Django是功能最为健全的一个WEB框架,但就因为过于健全,显得过于臃肿.但是Django中最为正要的就是Middleware.ORM和From表单. Django之web本质 Django之初 D ...

  7. Django之学员管理

    Django之学员管理 实现-------在前端页面提交的数据,后端可直接写入数据库.在页面实现操作数据库的增删改查. 数据表设计:(三个角色四张表) 班级表: id title 1 花果山国小一年级 ...

  8. Django初印象之视图(view)

    一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...

  9. django初体验 学习笔记

    django环境搭建     1.安装Python     2.ipython         sudo apt-get install ipython         sudo pip instal ...

随机推荐

  1. bzoj 1913: [Apio2010]signaling 信号覆盖【旋转卡壳(?)】

    参考:https://blog.csdn.net/qpswwww/article/details/45334033 讲的很清楚 做法比较像旋转卡壳但是具体是不是我也不清楚.. 首先知道只要求出每种方案 ...

  2. bzoj 1853: [Scoi2010]幸运数字&&2393: Cirno的完美算数教室【容斥原理】

    翻了一些blog,只有我用状压预处理嘛2333,.把二进制位的0当成6,1当成8就行啦.(2393是2和9 然后\( dfs \)容斥,加上一个数的\( lcm \),减去两个数的\( lcm \), ...

  3. 'ALTER TABLE SWITCH' 语句失败。表'MGXXX.dbo.user_XXX' 已分区,但 索引'ix_user_XXX_user_id' 未分区。

    问题描述: 今天在做分区切换的时候把旧log数据切到clear表,遇到了这个问题,顺便做下笔记记录一下解决方法 'ALTER TABLE SWITCH' 语句失败.表'MGXXX.dbo.user_X ...

  4. linux 磁盘 分区、格式化、挂载

    将容量结果易读的容量格式显示出来df -h 分区 初次接触仅分成两个分区(“/与Swap”)预留一个备用的剩余磁盘容量 磁盘分区 fdisk #df /找出磁盘文件名#fdisk /dev/hdc#m ...

  5. Linux环境下SolrCloud集群环境搭建关键步骤

    Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...

  6. java中什么包不需要导入

    java中Math.random()*10;在math包中不需要导入: 即import java.lang.Math; 即lang下的所有包都不需要导入.

  7. Oracle 用到的服务

    1.Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务,VSS(Volume ShadowCopy Service)能够让存储基础设备(比如磁盘,阵列等)创建 ...

  8. VS2012创建WebForm项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。

    解决方案: 使用VS2012开发,都要装NuGet插件(官网:http://nuget.org),进官网点安装就进入了微软的下载页面, 选择vs2012版本的NuGet.Tools.vsix文件,双击 ...

  9. select 1浅析

    今天看到项目代码里有这条语句,不懂select 1 from XXXXXXX里的1是何意,查了一番才知道: 1.select 1 from mytable;与select anycol(目的表集合中的 ...

  10. Discuz 页面不能加载插件的原因和解决方法

    模板中,<!--{subtemplate common/headerF}-->这样就不能加载 source/class/class_template.php里65行附近代码 $header ...