大纲

 安装Django 
1、创建Django工程 
2、创建Django app 
3、写一个简单的登录注册相应页面 
4、获取用户请求信息并处理 
5、前后端交互 
6、Django 请求 生命周期 
 跳转到这里
7、django内容整理

安装Django

pip3 install django             #python2.x 使用   `pip insall django`命令

windows安装后,添加Django安装路径的环境变量。

1、创建Django工程

django-admin startproject 【工程名称】
# 生成目录结构如下
mysite
- mysite # 对整个程序进行配置
- __init__.py
- settings.py # 配置文件
- urls.py # URL对应关系
- wsgi.py # 遵循WSGI规范,一般使用 uwsgi + nginx
- manage.py # 管理Django程序:如下
- python manage.py # 运行程序
- python manage.py startapp xx # 创建app
# Django的orm框架
- python manage.py makemigrations
- python manage.py migrate

SGI本质上就是一个封装了socket的模块,调用接口就可以。

  • 运行Django功能
python manage.py  # 或如下
python manage.py runserver 127.0.0.1:8000

通过pycharm 也能创建django程序。

写一个基本完整的http请求

编辑urls.py 文件

from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse # Http相应 def home(request):
return HttpResponse('<h1>Hello</h1>') urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^h.html/', home),
]

启动后,访问:127.0.0.1:8000/h.html/

不过实际中,上面的home相当于一个业务功能,而不同的功能,在django中可以分别创建不同的app。

2、创建Django app

  • 创建app
python manage.py startapp cmdb

把home函数移到cmdb\views.py中,

from django.shortcuts import HttpResponse

def home(request):
return HttpResponse('<h1>Hello</h1>')

urls.py修改如下:

from django.conf.urls import url
from django.contrib import admin
from cmdb import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^h.html/', views.home),
]
  • app目录结构
migrations     # django orm框架,修改表结构的操作记录(差异化)
__init__ # python3中有没有都一样,python2中必须有
admin # Django为我们提供的后台管理
apps # 配置当前app
models # ORM:写指定的类,通过命令可以创建数据库结构
tests # 单元测试
views # ****业务代码****

3、写一个简单的登录注册相应页面

新建一个templates 文件夹,用来存放html模板文件

views.py

# from django.shortcuts import HttpResponse
from django.shortcuts import render # django帮我们打开文件并相应的模块
# 因为经常返回数据,打开文件,所以django使用render模块,做这个事情。 def login(request):
# with open("templates/login.html", "r", encoding="utf-8") as f:
# data = f.read()
# return HttpResponse(data)
return render(request, 'login.html')
# 这里没有指定路径,在settings配置里,默认就已添加templates

templates/login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
label{
width: 80px;
text-align: right;
display: inline-block;
}
</style>
</head>
<body>
<form action="/login" method="post">
<p>
<label for="username">用户名:</label>
<input id="username" type="text" />
</p>
<p>
<label for="password">密码:</label>
<input id="password" type="text" />
<input type="submit" value="提交" />
</p>
</form>
</body>
</html>
  • js、css静态文件处理

页面里可能会包含css、js文件,这些静态文件也需要引入进来。

创建静态文件目录static,创建完之后还要在settings里面配置一下,最后面添加:

STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'), # 必须加上都好“,” 不加就报错
)

login.html 文件中引入css、js

<link rel="stylesheet" href="/static/commons.css">

总结:

创建完project后,优先做几件事:

1、配置模板的路径

settings.py

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',
],
},
},
]

2、配置静态目录

# 创建static目录

# settings 最后添加静态文件配置
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
# html模板文件引用css、js
<link rel="stylesheet" href="/static/commons.css" />

4、获取用户请求信息并处理

  • 注释掉CSRF

CSRF: 跨站请求伪造

后面会讲,这里先注释上,不然会报错

settings —> 找到MIDDLEWARE —> 注释掉

# 'django.middleware.csrf.CsrfViewMiddleware',
  • request 包含了客户端发来的所有信息。

客户端发过来的信息,内部django、wsgi帮我们处理,处理之后会给我们一个结果。把客户端所有的信息打包然后发给我,怎么发呢?

就是上面函数形参 request :包含了客户端用户发来的所有信息。

比如:request.method就是用户提交方式(get、post)。往往get获取表单;post方式提交数据。

form表单提交的时候,以类似字典的形式提交,所以要在html form里定义name

from django.shortcuts import render  # django帮我们打开文件并返回给用户
from django.shortcuts import redirect # 重定向、跳转 def login(request):
# request 包含用户提交的所有信息
error_msg = ''
if request.method == "POST": # request.method 用户提交方法
# request.POST 用户通过POST提交过来的数据
user = request.POST.get('user', None)
pwd = request.POST.get('pwd', None) # 不存在为None if user == 'root' and pwd == '': # 用户跳转
return redirect("http://blog.csdn.net/lgeng")
else: # 用户名密码错误。
error_msg = "用户名或密码错误"
return render(request, 'login.html', {"error_msg":error_msg})
# "error_msg:网页中定义的特殊文本,key"
  • Django模版语言

用户名密码错误,怎么给用户返回数据?

需要借助另外一件事:在模板里面,在Django里面可以写一些特殊的内容。

{{ }} Django 对其进行替换。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/static/commons.css">
<style>
label{
width: 80px;
text-align: right;
display: inline-block;
}
</style>
</head>
<body>
<form action="/login/" method="post">
{# action="/home":提交到http://127.0.0.1/home/ #}
<p>
<label for="username">用户名:</label>
<input id="username" name="user" type="text" />
</p>
<p>
<label for="password">密码:</label>
<input id="password" name="pwd" type="password" />
<input type="submit" value="提交1" />
<span style="color: red">{{ error_msg }}</span>
{# Django里面可以写一些特殊的内容,后台进行替换 #}
</p>
</form>
</body>
</html>

注意:网页action提交那里 action="/login/",要和urls.py 里 url(r'^login/', views.login),保持一致!!!

要是login/全是login/,要是login全是login,否则点击提交会报错:

RuntimeError at /login
You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:8000/login/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.

web框架中,之后Django中会报这个错。

PS:配置过程中,可能会种种原因遇到报错,这时候可以从django相应的过程中,逐步排查,最终找到错误点

5、前后端交互

urls.py :url(r'^home', views.home),

views.py

from django.shortcuts import render
USER_LIST = [
{'user':'alex', 'email': 'a.126.com', 'gender': "男"},
{'user':'lily', 'email': 'a.126.com', 'gender': "女"},
{'user':'lgeng', 'email': 'a.126.com', 'gender': "男"},
]
def home(request):
if request.method == "POST":
u = request.POST.get('username')
e = request.POST.get('email')
g = request.POST.get('gender')
temp = {'username':u, 'email':e, 'gender':g}
USER_LIST.append(temp)
return render(request, "home.html", {'user_list':USER_LIST})

templates/home.html

  • 注意下:django 模板语言for循环写法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body style="margin: 0">
<div style="height: 48px;</div>
<div>
<form action="/home" method="post">
<input type="text" name="username" placeholder="用户名" />
<input type="text" name="email" placeholder="邮箱"/>
<input type="text" name="gender" placeholder="性别"/>
<input type="submit" value="添加" />
</form>
</div>
<div>
<table>
{# django 模板语言for循环 (user_list:后端定义的全局变量) #}
{% for row in user_list %}
<tr>
{# 这里row代表字典,去索引用row.email,而不是row['email'] #}
<td>{{ row.username }}</td>
<td>{{ row.gender }}</td>
<td>{{ row.email }}</td>
</tr>
{% endfor %}
</table>
</div>
</body>
</html>

6、Django 请求 生命周期

  • 1)客户端请求
  • 2)路由系统:urls.py,路由关系映射
  • 3)视图函数:app/views.py,功能函数
  • 4)视图函数从DB等取数据,并嵌套到html中(html模板templates中)。渲染或组合,最终生成字符串返回给用户

转载请务必保留此出处:http://www.cnblogs.com/lgeng/p/7363852.html


7、django内容整理

  • 配置
 1. 创建Django工程
django-admin startproject 工程名 2. 创建APP
cd 工程名
python manage.py startapp cmdb 3、静态文件
project.settings.py STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
) 4、模板路径 DIRS ==> [os.path.join(BASE_DIR,'templates'),] 5、settings中 middlerware # 注释 csrf
  • 使用
 6、定义路由规则
urls.py "login" --> 函数名 7、定义视图函数
app下views.py def func(request):
# request.method GET / POST
# 获取数据
# http://127.0.0.1:8009/home?nid=123&name=alex
# request.GET.get('',None) # 获取请求发来的数据 # request.POST.get('',None) # 返回数据
# return HttpResponse("字符串")
# return render(request, "HTML模板的路径")
# return redirect('/只能填URL')
# 只返回url地址,让客户端再次请求,不会把跳转的数据发给客户端
# redirect('/login') 前面的"/"代指本地url,前面的域名端口
  • 模板渲染
   8、模板渲染
特殊的模板语言 -- {{ 变量名 }}
views.py
def func(request):
return render(request, "index.html", {'current_user': "lgeng"})

index.html
 <html>
..
<body>
<div>{{current_user}}</div>
</body> </html>
====> 最后生成的字符串,返回给用户
   <html>
..
<body>
<div>lgeng</div>
</body> </html>


 -- For循环
views.py
def func(request):
return render(request, "index.html", {'current_user': "alex", 'user_list': ['alex','eric']})
index.html
<html>
..
<body>
<div>{{current_user}}</div>
<ul>
{% for row in user_list %}
{% if row == "alex" %}
<li>{{ row }}</li>
{% endif %}
{% endfor %}
</ul>
</body>
</html>

###索引#################

def func(request):
return render(request, "index.html", {
'current_user': "alex",
'user_list': ['alex','eric'],
'user_dict': {'k1': 'v1', 'k2': 'v2'}})

index.html
<html>
..
<body>
<div>{{current_user}}</div> <a> {{ user_list.1 }} </a> # 取列表
<a> {{ user_dict.k1 }} </a> # 取字典
<a> {{ user_dict.k2 }} </a> </body> </html>

###### 条件
def func(request):
return render(request, "index.html", {
'current_user': "alex",
"age": 18,
'user_list': ['alex','eric'],
'user_dict': {'k1': 'v1', 'k2': 'v2'}})

index.html
 <html>
..
<body>
<div>{{current_user}}</div> <a> {{ user_list.1 }} </a>
<a> {{ user_dict.k1 }} </a>
<a> {{ user_dict.k2 }} </a> {% if age %}
<a>有年龄</a>
{% if age > 16 %}
<a>老</a>
{% else %}
<a>少</a>
{% endif %}
{% else %}
<a>无年龄</a>
{% endif %}
</body>
</html>

<!--   END  -->

《版权说明》-- 本文转自: http://blog.csdn.net/fgf0/articdetails/55261

Django(一) 安装使用基础的更多相关文章

  1. Linux的基础命令, django的安装与使用

    一. Linux一些基础指令 cat命令, 用于查看纯文本文件(常用于内容较少的) cat 校花的故事.txt # 查看文件 cat -n 校花的故事.txt # 查看文件并显示行号 -n 显示行号 ...

  2. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  3. Django的安装配置和开发

    参考:<Django Web开发指南> Django的安装配置 1.https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz ...

  4. day56——http协议、MVC和MTV框架模式、django下载安装、url路由分发

    day56 昨日复习 今日内容 HTTP协议 网页:https://www.cnblogs.com/clschao/articles/9230431.html 老师整理的重点 老师整理的重点 请求信息 ...

  5. Django环境安装

    1.安装Django # 自动安装PyPi提供的最新版本 pip install django # 安装指定版本 pip install django==2.2 # 验证安装 >>> ...

  6. Ubuntu14.04 Django Mysql安装部署全过程

    Ubuntu14.04 Django Mysql安装部署全过程   一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...

  7. 跟我一起Django - 01 安装和初始化

    跟我一起Django - 01 安装和初始化 python环境 C:\Python27\Lib\site-packages>python --versionPython 2.7.5 安装setu ...

  8. 【django入门教程】Django的安装和入门

    很多初学django的朋友,都不知道如何安装django开发以及django的入门,今天小编就给大家讲讲django入门教程. 注明:python版本为3.3.1.Django版本为1.5.1,操作系 ...

  9. NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者

    NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间: ...

随机推荐

  1. 零基础学Python--------第5章 字符串及正则表达式

    第5章 字符串及正则表达式 5.1 字符串常用操作 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串.截取字符串.格式化字符串等.下面将对Python中常用的 ...

  2. 面向对象的一小步:添加ActiveRecord的Scope功能

    问题场景 我们用Yii2的ActiveRecord功能非常的方便,假如我们有个Model叫Student,那么ActiveQuery可以通过这种方式轻便地获得: $query = Student::f ...

  3. 设计模式之代理模式(Proxy)(2)

    代理模式是为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,其特征是代理类与委托类有同样的接口. ...

  4. 轨迹系列6——车载GPS对接方案汇总小结(809、自定义协议、前置库、WS)

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 最近在不同项目中对接了多个车载GPS厂商服务终端,绝大多数厂商 ...

  5. json-gson:.isJsonNull()问题-堆栈溢出

    不用管我下面的第一个答案.我读得太快了. 看起来这是一个简单的例子,文件撒谎-或者至少是被误解了.幸运的是,代码并不是那么简单,而且gson是一个开源项目. 这是 JsonObject.get(Str ...

  6. axios与ajax区别

    1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...

  7. 各种文件用JS转Base64之后的data类型

    1.txt       data:text/plain;base64, 2.doc     data:application/msword;base64, 3.docx   data:applicat ...

  8. C#基础第七天

    1.ref参数ref参数侧重于将一个变量以参数的形式带到一个方法中进行改变,改变完成后,再讲改变后的值带出来.在使用ref参数的时候需要注意:ref参数在方法外必须为其赋值. 2.方法的重载方法的重载 ...

  9. 微信小程序测试方法总结

    最近的新项目是小程序加web端后台管理 主要找了些文章方便自己使用也分享给大家: 小程序官方文档 https://developers.weixin.qq.com/miniprogram/design ...

  10. 超哥笔记 --nginx入门(6)

    一 NGINX 1 nignx是什么 nginx是一个开源的支持高性能,高并发的web服务和代理服务软件. nginx比他大哥apache性能改进许多,nginx占用的系统资源更少,支持高并发连接,有 ...