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 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】

    是我想复杂了 首先发现大于关系构成了一棵二叉树的结构,于是树形dp 设f[i]为i点的方案数,si[i]为i点的子树大小,递推式是\( f[i]=f[i*2]*f[i*2+1]*C_{si[i]-1} ...

  2. 1.1.1最短路(Floyd、Dijstra、BellmanFord)

    转载自hr_whisper大佬的博客 [ 一.Dijkstra 比较详细的迪杰斯特拉算法讲解传送门 Dijkstra单源最短路算法,即计算从起点出发到每个点的最短路.所以Dijkstra常常作为其他算 ...

  3. ACM_折线中点

    折线中点 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定平面上N个点P1, P2, ... PN,将他们按顺序连起来,形成一 ...

  4. jacaScript数组

    1.var arr=['1','2','3'] typeof arr (判断数组类型)    print(arr)打印数组内容 2.arr[100]='x',  数组中间自动添加,alert(arr. ...

  5. AJPFX关于抽象方法和接口

    class Demo_Animal1{ public static void main(String[] args) {                Cat a = new Cat("加菲 ...

  6. 腾讯云COS对象存储的简单使用

    叮当哥之前买了一年的腾讯云服务器,昨日偶然发现腾讯云送了叮当哥半年的cos对象存储服务器,于是就撸起袖子传了几张珍藏的高清大图上去,现将其上传的简单使用步骤总结一波(其它操作参加官方SDK文档API) ...

  7. poj3040 Allowance

    思路: 贪心. 看了题解说是 先把面值从大到小排序然后从头往尾扫,只要不超额,能取多少去多少然后如果还有剩余,就从尾往头扫,尽量取,让他恰好超额 不过并不懂证明. 实现: #include <i ...

  8. 平板&Safari 开发tips

    css: *{ margin: 0; padding: 0;  /* 禁止用户点选网页内容 */ -webkit-touch-callout:none; -webkit-user-select:non ...

  9. 机器学习-随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )

    梯度下降(GD)是最小化风险函数.损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路,下面从公式和实现的角度对两者进行分析,如有哪个方面写的不对,希望网友纠正. 下面的h(x)是要拟 ...

  10. Apache Tomcat 之路(三 部署多个应用)

    想要在一台服务器上部署多个web应用的时候有两种部署方式:1.拷贝多个tomcat 服务器,每个服务器启动不同的web应用;2.一个tomcat容器部署多个web应用 两种方式的优缺点:多个tomca ...