Django(一) 安装使用基础
大纲
安装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(一) 安装使用基础的更多相关文章
- Linux的基础命令, django的安装与使用
一. Linux一些基础指令 cat命令, 用于查看纯文本文件(常用于内容较少的) cat 校花的故事.txt # 查看文件 cat -n 校花的故事.txt # 查看文件并显示行号 -n 显示行号 ...
- Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...
- Django的安装配置和开发
参考:<Django Web开发指南> Django的安装配置 1.https://www.djangoproject.com/download/下载Django-1.5.1.tar.gz ...
- day56——http协议、MVC和MTV框架模式、django下载安装、url路由分发
day56 昨日复习 今日内容 HTTP协议 网页:https://www.cnblogs.com/clschao/articles/9230431.html 老师整理的重点 老师整理的重点 请求信息 ...
- Django环境安装
1.安装Django # 自动安装PyPi提供的最新版本 pip install django # 安装指定版本 pip install django==2.2 # 验证安装 >>> ...
- Ubuntu14.04 Django Mysql安装部署全过程
Ubuntu14.04 Django Mysql安装部署全过程 一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...
- 跟我一起Django - 01 安装和初始化
跟我一起Django - 01 安装和初始化 python环境 C:\Python27\Lib\site-packages>python --versionPython 2.7.5 安装setu ...
- 【django入门教程】Django的安装和入门
很多初学django的朋友,都不知道如何安装django开发以及django的入门,今天小编就给大家讲讲django入门教程. 注明:python版本为3.3.1.Django版本为1.5.1,操作系 ...
- NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者
NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间: ...
随机推荐
- Android Studio 关于沉浸式状态栏
values-v19/style.xml <style name="AppTheme" parent="Theme.AppCompat.Light.NoAction ...
- 面向对象的一小步:添加ActiveRecord的Scope功能
问题场景 我们用Yii2的ActiveRecord功能非常的方便,假如我们有个Model叫Student,那么ActiveQuery可以通过这种方式轻便地获得: $query = Student::f ...
- js之正则的坑
首先给一个神奇的图: 我的反应,精分吧!一会儿true一会儿false的... 后来发现,把g去掉后就正常了,那这是为什么呢??lastIndex惹得鬼! 正文: lastIndex 全局正则表达是, ...
- Linux驱动学习1.hello world;
最近项目需要使用Linux系统开发,借此机会学习一下Linux驱动开发 hello word代码hello.c #include <linux/module.h> #include < ...
- .NET和Java之争
这几天连续有多篇文章(详细文章列表在<.NET和Java之争一点随想>和<由优劣语言之争引起的思考>有写)诋毁.NET,这类文章我十几年前就看得多了,只不过十几年前是C和C++ ...
- SpringBoot Web学习笔记
一.资源的访问: 情形一.所有的 /webjars/** 都会去 classpath:/META_INFO/resource/webjars/ 下找资源: webjars:以jar包的方式引入静态 ...
- ASP.NET C# 连接 Oracle数据库增删改查,事务
一.知识介绍 ①ASP.NET 使用的是MVC模式,开发工具Visual studio ,语言C# ②Oracle是比较重型的数据库,这里主要介绍连接数据库,对数据进行具体的使用 ③Visual St ...
- DVWA 黑客攻防演练(七)Weak Session IDs
用户访问服务器的时候,一般服务器都会分配一个身份证 session id 给用户,用于标识.用户拿到 session id 后就会保存到 cookies 上,之后只要拿着 cookies 再访问服务器 ...
- ubuntu下解压rar文件
ubuntu 下rar解压工具安装方法: 压缩功能 sudo apt-get install rar 1 解压功能 sudo apt-get install unrar 1 使用 可以直接在UI界面使 ...
- Ehcache入门经典:第二篇ehcache.xml的参数
继续第一篇 diskStorepath:指定在硬盘上存储对象的路径path属性可以配置的目录有: user.home(用户的家目录) user.dir(用户当前的工作目录) java.io.tmpdi ...