Django使用介绍

1、MTV

Django中的MTV分别表示models、templates和views。

models文件主要定义数据库的连接。

templates文件可以放一些html的模版。

views文件主要定义处理请求的函数。

2、安装django(pip安装方式)

安装pip

tar zxvf pip-8.1.2.tar.gz
cd pip-8.1.2
python setup.py install

pip安装完成后,可以直接用来安装jdango

pip install django

验证是否安装成功,(python中导入django模块,若没提示错误,即表示安装成功)

>>> import django
>>>

3、创建应用

创建一个项目

django-admin startproject sites

该项目的结构为

|____sites
| |______init__.py
| |____settings.py
| |____urls.py
| |____wsgi.py
|____manage.py

在该项目中创建一个应用

django-admin startapp mysite

该应用目录的结构为

|______init__.py
|____admin.py
|____apps.py
|____migrations
| |______init__.py
|____models.py
|____tests.py
|____views.py

应用已经创建完毕,现在写一个简单的http请求:

  • 1、在views中定义处理请求的函数
  • from django.shortcuts import HttpResponse
    def index(request):
    return HttpResponse('ok')
  • 2、在urls中映射url和对应的处理函数
  • from mysite import views
    urlpatterns = [
    url(r'^index/', views.index),
    ]
  • 3、启动web端
  • python manage.py runserver

服务端默认会监听8000端口,通过浏览器请求 http://localhost:8000/index即可获得'ok'字符串。

4、Django中的路由

路由即将不同url的请求转发给处理该请求的函数,Django中的路由表定义在urls文件中。

  • 动态url

urls文件的配置

url中支持正则,(\d+)表示获取匹配到的数字。

urlpatterns = [
url(r'^index/(\d+)/(\d+)',views.index),
]
  • 变量付值

(?P<n1>\d+)表示将匹配到的值(数字)付给形参n1,然后获取n1的值。

urlpatterns = [
url(r'^index/(?P<n2>\d+)/(?P<n1>\d+)',views.index),
]

view文件的配置

def index(request,n1,n2):
n = n1+n2
return HttpResponse(n)
  • 二级路由(将请求转发到其它app中)

  请求到达project中的urls文件后进行转发,转发至其它app下的urls文件中。

  project中urls文件配置  

from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^test1/',include('test1.urls')), #请求test1时,转发到test1下面的url
url(r'^test2/',include('test2.urls')),
]

test1中url文件的配置

from django.conf.urls import url,include
from django.contrib import admin
from test1 import views
urlpatterns = [
url(r'^home/',views.home), #进行二级匹配,将test1/home的请求转发给home函数处理
]

  test1中views文件的配置

from django.shortcuts import render
from django.shortcuts import HttpResponse # Create your views here.
def home(request):
return HttpResponse('test1.home')

  test2中urls文件的配置

from django.conf.urls import url,include
from django.contrib import admin
from test2 import views
urlpatterns = [
url(r'^home/',views.home),
]

  test2中views文件的配置

from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here. def home(request):
return HttpResponse('test2.home')

5、数据库操作

  • 数据库创建

  Django中数据库的配置文件为settings,默认的数据库引擎为 sqlite3。

  Django中是在models文件中创建数据库,通过类创建数据库。创建数据库之前,需要在settings文件中注册一下app。

  如下:

  settings.py中注册test1

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'test1'
]

  models.py中使用类创建数据库

from django.db import models

# Create your models here.

class UserInfo(models.Model):
username=models.CharField(max_length=32)
password=models.CharField(max_length=32)
age=models.IntegerField()

  生成创建数据库的配置文件

python manage.py makemigrations

  此时在test1目录下会生成一个0001_initial.py  生成数据库的配置文件

  根据生成的配置文件创建数据库

python manage.py migrate

  这样,就创建好了数据库。

  • 数据库增、删、改、查

   1、插入数据

  test1-views.py文件定义插入数据的函数

from django.shortcuts import render
from django.shortcuts import HttpResponse
from test1 import models # Create your views here. def db_handle(request):
models.UserInfo.objects.create(username='ahaii',password='',age=20)
  
return HttpResponse('ok')

  也可以将要插入的数据放到字典中

from django.shortcuts import render
from django.shortcuts import HttpResponse
from test1 import models # Create your views here. def db_handle(request):
dic={'username':'ahaii','password':'','age':20}
models.UserInfo.objects.create(**dic)
return HttpResponse('ok')

  test1-urls.py文件定义请求的url

from django.conf.urls import url,include
from django.contrib import admin
from test1 import views
urlpatterns = [
url(r'^db/',views.db_handle),
]

  浏览器请求http://localhost:8000/test1/db/时,就会执行views中的db_handle函数,即插入数据。

  2、删除数据

  views.py文件

  删除username为ahaii的用户信息

def db_handle(request):
models.UserInfo.objects.filter(username='ahaii').delete()
return HttpResponse('ok')

  3、修改数据

  views.py文件

  把所有age值改为23

def db_handle(request):
models.UserInfo.objects.all().update(age=23)
return HttpResponse('ok')

  4、查找数据

  views.py文件  

def db_handle(request):
models.UserInfo.objects.filter(username='ahaii')
models.UserInfo.objects.filter(age=23).first() #查找所有age=23中的第一个
return HttpResponse('ok')

一个 UserInfo对象即为数据库中的一条数据。

6、将后台数据展示在前端页面上

views.py文件

def db_handle(request):
obj=models.UserInfo.objects.all() #查询的所有数据,每个obj是数据库中的一条数据
return render(request,'1.html',{'li':obj}) #返回一个html,并将html中的变量使li替换

在project中创建模版目录templates,并在template中创建1.html文件

1.html文件

</head>
<body>
<table border="1px">
<thead> #设置表头部
<tr>
<th>用户名</th>
<th>密码</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
{% for item in li %} #li中包含username、password和age
<tr>
<td>{{item.username}}</td>
<td>{{item.password}}</td>
<td>{{item.age}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>

修改settings.py文件,设置存放模版位置'DIRS':(),'

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

7、静态文件设置

修改settings.py,添加如下

STATICFILES_DIR=(os.path.join(BASE_DIR,'templates'),
) 

8、通过前端页面添加数据并显示

post 提交数据,get获取数据。

若为post方式提交数据,需要修改settings.py文件,将 'django.middleware.csrf.CsrfViewMiddleware', 一行注释掉。

MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

views.py文件

def db_handle(request):
if request.method=='POST': #先判断请求的方法
models.UserInfo.objects.create(username=request.POST['username'], #requrst.POST为提交的数据,插入数据库
password=request.POST['password'],
age=request.POST['age'])
obj=models.UserInfo.objects.all() #获取数据库中的数据
return render(request,'1.html',{'li':obj})

1.html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="test1/db_handle/" method="post">
<p><input type="text" name="username"></p>
<p><input type="text" name="password"></p>
<p><input type="text" name="age"></p>
<p> <input type="submit" value="提交"></p>
</form>
<table border="1px">
<thead>
<tr>
<th>用户名</th>
<th>密码</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
{% for item in li %}
<tr>
<td>{{item.username}}</td>
<td>{{item.password}}</td>
<td>{{item.age}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>

Django的使用的更多相关文章

  1. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  2. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  3. django server之间通过remote user 相互调用

    首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...

  4. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  5. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  6. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  7. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  8. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  9. Django

    一.Django 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统) ...

  10. Django admin定制化,User字段扩展[原创]

    前言 参考上篇博文,我们利用了OneToOneField的方式使用了django自带的user,http://www.cnblogs.com/caseast/p/5909248.html , 但这么用 ...

随机推荐

  1. HDU 2045 不容易系列之(3)—— LELE的RPG难题(递归/动态规划)

    不容易系列之(3)—— LELE的RPG难题 Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即" ...

  2. float 属性详解

    当前元素分类(float:left) 下一个紧邻元素分类(不含float) 结论 块级元素(a) 块级元素(b) b会填充a遗留下来的空间,a会和b发生重叠,a的图层在上面. 内联元素(b) b会紧跟 ...

  3. Android中AlertDialog对话框禁止按[返回键]或[搜索键]

    alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(Di ...

  4. CodeForces 711A Bus to Udayland

    简单题. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #inclu ...

  5. 第一百二十二节,JavaScript表单处理

    JavaScript表单处理 学习要点: 1.表单介绍 2.文本框脚本 3.选择框脚本 为了分担服务器处理表单的压力,JavaScript提供了一些解决方案,从而大大打破了处处依赖服务器的局面. 一. ...

  6. Sipdroid实现SIP(一): 注册

    目录 注册: 预注册获取长号和用户注册 预注册返回长号 周期性用户注册 Receiver类概述 SipdroidEngine类概述 Sipdroid类中的用户注册: 注册代理和注册事务 注册代理类Re ...

  7. [Q]系统环境改变导致“未注册”的解决方法

    据用户反映设置账户开机密码后显示未注册, 具体表现: 1. 重装试用版,重新获取注册申请码,发现注册申请码跟原来没有发生变化. 2. 重新使用原来的授权文件注册,但打开后显示未注册. 3. 发现“** ...

  8. Vim/gvim容易忘记的快捷键

    正常模式==>插入模式 按i 在光标前插入 按I 在行首插入 按a 在光标后插入 按s 删除光标所在的字符再插入 按A 在行末插入 按o 在当前行之下新建行 按O 在当前行之上新建行 按S 删除 ...

  9. zookeeper(2)-curator

    一.Curator介绍 zookeeper的提交人也说过,curator对于zookeeper而言就像是guava对于java差不多,更加优雅高效. 而且之前的zookeeper原生API,往往因为2 ...

  10. NOIP2010-普及组初赛C语言解析

    第十六届全国青少年信息学奥林匹克联赛初赛试题 一.单项选择题 (共20题,每题1.5分,共计30分.每题有且仅有一个正确选项.) 1.2E+03表示(  D  ). A.2.03          B ...