Python 之Django
1.安装Django(下载慢的时候用MaxVPN)
pip3 install django
2.Django处理流程
新建project(mysite),执行dj(mysite),然后在console界面中运行 D:\Python\django_project>python manage.py startapp cmdb,创建cmdb的APP。
3.Django采用MTV框架。M=Modals(数据库),T=Template(HTML模板),V=Views(用户处理逻辑)
在配置文件urls.py中指定路由关系
from cmdb import views urlpatterns = [
#url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
]
在views.py中定义用户的处理逻辑
def index(request):
return (HttpResponse(''))
这样,在执行了dj(site)之后,可以通过IE访问到我们编写的程序逻辑:http://127.0.0.1:8000/index/
4.进一步我们需要返回自己编写的HTML的时候,而不是通过HttpResponse返回。我们需要新建一个templates文件夹,在里面新建index.html文件,然后写上自定义的HTML文件:
<body>
<table border="1 solid red">
<tr>
<th>TITLE1</th>
<th>TITLE2</th>
<th>TITLE3</th>
</tr>
<tr>
<td>星期一</td>
<td>星期二</td>
<td>星期三</td>
</tr>
</table>
</body>
然后,改写用户逻辑里面的views.py
def index(request):
# return (HttpResponse('123'))
return render(request,'index.html')
这样再通过http://127.0.0.1:8000/index/访问的时候,就可以访问到在template文件夹下定义的index.html文件了。
如果在执行程序的时候,报找不到template的错误,那么是settings里面定义的路径的问题
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 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',
],
},
},
]
5.导入静态文件
在mysite下面建立文件夹static
在views.py里面添加引用
<script src="/fff/jquery-1.12.4.js"></script>
在settings.py里面定义静态文件的路径
STATIC_URL = '/fff/' STATICFILES_DIRS = (
os.path.join(BASE_DIR,'static'),
)
注意这里静态文件的URL要与src引入的路径相匹配,然后通过http://127.0.0.1:8000/fff/jquery-1.12.4.js访问JQuery成功。
6.表单的提交
在index.html里定义HTML模板
<h1>用户输入</h1>
<form action="/index/" method="POST">
<input type="text" name="user"/>
<input type="text" name="email"/>
<input type="submit" value="提交"/>
</form>
在views.py中获取到表单的数据
def index(request):
# return (HttpResponse('123'))
if(request.method == "POST"):
user = request.POST.get("user",None);
email = request.post.get("email",None)
print (user,email)
return render(request,'index.html')
执行的时候报错:
Forbidden (403)
CSRF verification failed. Request aborted.
You are seeing this message because this site requires a CSRF cookie when submitting forms. This cookie is required for security reasons, to ensure that your browser is not being hijacked by third parties.
If you have configured your browser to disable cookies, please re-enable them, at least for this site, or for 'same-origin' requests.
在settings.py文件中找到MIDDLEWARE,并注释其中一行:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
提交表单数据,可以看到结果:
[28/Oct/2016 01:58:56] "GET /index/ HTTP/1.1" 200 655
aa bb
[28/Oct/2016 01:59:00] "POST /index/ HTTP/1.1" 200 655
这样显示数据不行,必须要在网页文件中显示才行,因此,我们需要改写views.py文件
USER_INPUT=[
{'user':'u1','email':'e1'},
{'user':'u2','email':'e2'},
] def index(request):
# return (HttpResponse('123'))
if(request.method == "POST"):
user = request.POST.get("user",None)
email = request.POST.get("email",None)
temp = {'user':user,'email':email}
USER_INPUT.append(temp)
print (user,email)
return render(request,'index.html',{'data':USER_INPUT})
同时,我们定义显示HTML的格式:
<h1>数据展示</h1>
<table border="1">
{% for item in data %}
<tr>
<td>{{ item.user }}</td>
<td>{{ item.email }}</td>
</tr>
{% endfor %}
</table>
并且,在HTML文件中{% %}的写法会自动循环表单中提交的数据,然后将其显示出来。Django后台帮我们把这个循环改写成了python的循环,item.user和item.email就相当于字典的key值。
这样操作以后,执行http://127.0.0.1:8000/index/,然后通过前台就可以添加数据并且实时的显示了。
7.上面表单的提交在页面刷新以后就没有了,因为内容是存放在缓存中的,现在,我们需要将数据存放在数据库当中,改写之前的代码。
在models.py中创建UserInfo的类:
class UserInfo(models.Model):
user = models.CharField(max_length=32)
email = models.CharField(max_length=32)
在settings.py中注册cmdb,并且查看DATABASES的设置:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cmdb',
]
执行命令创建数据库,表
D:\Python\mysite>python manage.py makemigrations
Migrations for 'cmdb':
cmdb\migrations\0001_initial.py:
- Create model UserInfo D:\Python\mysite>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, cmdb, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying cmdb.0001_initial... OK
Applying sessions.0001_initial... OK
在用户逻辑views.py中需要引入models操作数据库
from cmdb import models
def index(request):
if(request.method == "POST"):
u = request.POST.get("user",None)
e = request.POST.get("email",None)
models.UserInfo.objects.create(user=u,email=e)
data_list = models.UserInfo.objects.all()
# for item in data_list:
# print (item.user,item.email)
return render(request, 'index.html',{'data':data_list})
在显示页面上index.html显示数据库中提取的数据:
<body>
<table border="1 solid red">
<tr>
<th>TITLE1</th>
<th>TITLE2</th>
<th>TITLE3</th>
</tr>
<tr>
<td>星期一</td>
<td>星期二</td>
<td>星期三</td>
</tr>
</table>
<script src="/fff/jquery-1.12.4.js"></script> <h1>用户输入</h1>
<form action="/index/" method="POST">
<input type="text" name="user"/>
<input type="text" name="email"/>
<input type="submit" value="提交"/>
</form> <h1>数据展示</h1>
<table border="1">
<tr>
<th>用户名</th>
<th>邮箱</th>
</tr>
{% for item in data %}
<tr>
<td>{{ item.user }}</td>
<td>{{ item.email }}</td>
</tr>
{% endfor %}
</table> </body>
MIDDLEWARE
Python 之Django的更多相关文章
- [Python] 利用Django进行Web开发系列(一)
1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...
- [Python] 利用Django进行Web开发系列(二)
1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...
- VIM for Python and Django Development
VIM for Python and Django Development VIM-PyDjango created by Programmer for Programmer who work on ...
- Window环境下Python和Django的安装
转载地址:http://blog.csdn.net/haoni123321/article/details/7593821 1.下载python,本文使用python-2.7.2.msi 2.下载dj ...
- Python和Django在Windows上的环境搭建
作为一个.NET程序员,真心不喜欢Python以及PHP这种松散的语法.有人说,程序员应该多学几门语言,本想学习Java,无奈感觉Java的语法太啰嗦了.很多人都推荐Python,说它的语法简洁,执行 ...
- 【Python】django安装
官方下载:https://www.djangoproject.com/download/ 报错 [root@test Django-]# python setup.py install Traceba ...
- Python和Django的Third Libraby分类汇总
这些第三方包与Python和Django一起构成了强大的生态系统,自己在开发时大大减小工作难度和工作量, 这些包基本上能满足我们的大部分需求.人与人的差距,其中一点是你知道的比他多,这样你就能大大提高 ...
- 用Python和Django实现多用户博客系统(二)——UUBlog
这次又更新了一大部分功能,这次以app的形式来开发. 增加博客分类功能:博客关注.推荐功能(ajax实现) 增加二级频道功能 更多功能看截图及源码,现在还不完善,大家先将就着看.如果大家有哪些功能觉的 ...
- Django中国|Django中文社区——python、django爱好者交流社区
Django中国致力于成为Python和Django框架等技术的中文开发者学习交流平台. 内容涵盖python教程.python基础.Django教程.python入门.web.py教程.linux教 ...
- Python 学习笔记13:Python + wsgi + django 配置。坑爹的python3和wsgi不兼容的解决
今人不见古时月,今月曾经照古人.生命是如此的美丽与短暂! 学习Python已经两个月了,Python的语法通过做简单的语法题和看Python语法介绍,有了初步的了解.但上班还是要做别的事情,所以感觉学 ...
随机推荐
- React Native交互组件之Touchable
React Native交互组件之Touchable:只要在组件外面包一个Touchable组件就可以实现点击交互. TouchableHighlight:高亮触摸 当点击时,组件的透明度会改变,可以 ...
- HDU 2254
http://acm.hdu.edu.cn/showproblem.php?pid=2254 矩阵乘法两个经典问题的综合题,还要离散化和处理边界,好题啊好题 题意容易理解错,每一天是独立的,所以根据加 ...
- Qt工程使用第三方库——Qt下使用glut库
本人使用的环境 操作系统:windows10 Qt构建套件:qt-mingw4.8.5 + mingw4.4.0 Qt Creator版本:3.6.1 本教程配置针对工程而言,每个工程需要单独配置 ...
- Hive 实战(2)--hive分区分桶实战
前言: 互联网应用, 当Mysql单机遇到性能瓶颈时, 往往采用的优化策略是分库分表. 由于互联网应用普遍的弱事务性, 这种优化效果非常的显著.而Hive作为数据仓库, 当数据量达到一定数量时, 查询 ...
- D3 的优势
可视化的库有很多,基于 JavaScript 开发的库也有很多,D3 有什么优势呢? (1)数据能够与 DOM 绑定在一起 D3 能够将数据与 DOM 绑定在一起,使得数据与图形成为一个整体,即图形中 ...
- #import 跟 #include、@class 之间的区别
#include 是 C/C++ 导入头文件的关键字 是完整的包含某个文件的内容(包括该文件中被导入的文件) #import 是 OC 导入头文件的关键字 #import 指令是 OC 针对 #in ...
- vb6获取字符串长度
用过VB5.0或者更早版本的读者应该知道VB有一个测试字符串长度的函数: Len.但当你升级到VB6时,会发现这里的Len并没有以前那么好用了——它变成了测试字符个数而不是字符串长度.就是说,当你用以 ...
- mysql-创建库之问题
一.在登入mysql命令行,创建数据库时报错 ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'xiaolu ...
- 【python】类中@property使用
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...
- SQL:查找被锁的表,以及锁表的SQL语句(重点推荐)
--死锁检测 use master Select * --找到SPID exec sp_lock --根据SPID找到OBJID ) --根据OBJID找到表名 1.DatabaseName 同于你要 ...