官方网站: 点击

Django 项目是一个python定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:

  • 用于创建模型的对象关系映射
  • 为最终用户设计的完美管理界面
  • 一流的 URL 设计
  • 设计者友好的模板语言
  • 缓存系统。

设计模式MVC和MTV

简单来说就是按照不同的功能将文件打包归类的方法.

  • MVC: 大多数web框架使用的设计模式

    Models: 数据库操作 (模型)

    Views: html模版 (视图)

    Controllers: web后台处理函数 (控制器)

  • MTV:django中使用的设计模式

    Models: 数据库操作 (模型)

    Templates: html模版 (视图)

    Views: web后台处理函数 (控制器)

PS: 关于设计模式,不太懂,这里有个文章: 点击

基本操作

安装

pip install django

创建项目

一个项目可以有创建多个APP

(python3) D:\git>c:\users\admin\python3\Scripts\django-admin.exe startproject Mysite
#windwons中需要将django-admin加入环境变量,不然就要使用绝对路径使用命令

PS:执行这条命令之后会创建一个项目主文件夹Mysite打包所有的项目文件,在主文件夹下面又会生成一个项目配置文件,

setting.py: 项目主配置文件

urls.py: 路由文件

wsgi.py: 项目的socket服务

templates: html模版

manager.py: 项目主程序,封装了django的默认命令通过执行该文件启动管理项目

PS: 使用pycharm的时候最好用ide自己的创建newproject功能.在cmd创建的项目在pycharm会有一些路径问题.应该是pycharm的bug.不能正确读取项目的配置吧.也或许是settings某些配置需要手动配置.很早就发现这个问题,一直没有仔细研究

创建app

cd  D:\git\Mysite
(python3) D:\git\Mysite>python manage.py startapp monitor

同时在settings.py中注册一下app.一定要逗号.

PS: 在项目主文件夹下创建APP

每个app下的默认目录有如下文件

migrations: 数据管理模块

admin.py: django自带的后台配置管理

apps.py: APP的配置文件

models.py: MTV中的models,只能是一个文件,不能动

views.py: MTV中的views,可以改为一个文件夹

运行第一个APP

(python3) D:\git\Mysite>python manage.py runserver 127.0.0.1:8000
  • 在执行之前我们先要给urls路由文件定义一个页面
from django.conf.urls import url
from django.contrib import admin
from monitor import views #导入monitor这个app的views文件 urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/',views.home) #表示访问home页面由views.home函数处理
]
  • 同时给views.py定义一个函数来处理请求
from django.shortcuts import render
from django.shortcuts import HttpResponse # Create your views here. def home(request):
return HttpResponse('Django app "monitor" is runnning') #使用HttpResponse给用户返回一个'OK'

数据库操作

djang的数据库在settings.py里的DATABASES()配置,默认使用sqlite,而数据库的管理是通过migrations,新建的models文件会经过migrations生成migrations代码文件,migrate通过migrations代码文件生成数据库的表数据.所以要先makemigrations再进行migrate

  • makemigrations生成migrations文件
(python3) D:\git\Mysite>python manage.py makemigrations

makemigrations会根据models.py中的代码去和当前migrations代码对比生成新的migrations代码.

  • migrate根据migrations创建数据库相关
(python3) D:\git\django\Mysite>python manage.py migrate

migrate会根据当前的migrations代码和django已经使用中的migrations文件做对比对数据库表进行操作

PS: Django默认是依赖一些数据库表

默认admin

默认后台的管理员

(python3) D:\git\django\Mysite>python manage.py createsuperuser

静态文件设置,按照规范应该设置统一路径

  1. html在项目的settings.py里设定,应该设在templates
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
...
  1. js,css,images也是在settings里设置
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static')
)

路由系统 urls.py

将用户不同请求的发送到后端进行不同的处理,定义路由有两种方式

  • 根据路由规则对应views中函数,支持正则表达式

urls.py中定义

url(r'^blogs/(\d*)', views.blogs),
url(r'^blogs/(?P<name>\w*)/(?P<id>\d*)', views.blogs),
url(r'^blogs/(?P<name>\w*)', views.blogs,{'id':333}),

PS: #urls会自动把blogs/后的数据作为arg传给后端.'/'分割参数 "r'^blogs/(\d)/(\d)"就会传两个参数

monitor.views定义blgos函数

def blogs(request,arg):
return HttpResponse(arg) ###将获取到的arg返回

PS: request封装了请求的所有数据,

request.POST可以取得用POST方法请求的数据

request.GET可以取得用GET方法请求的数据.

arg是urls.py通过分析链接发过来的参数

  • 根据APP对路由规则进行分类(二级路由)

在项目的urls.py加入代码:

from django.conf.urls import include
from cmdb import urls
urlpatterns = [
url(r'^cmdb/', include('cmdb.urls')),
]
#建立指向cmdb的路由规则

新建一个cmdb的app,并在app中新建urls.py

from django.conf.urls import url
from cmdb import views
urlpatterns = [
url(r'^myhome/', views.myHome),
]
#在APP中建立myhome的路由规则

views.py中加入代码

from django.shortcuts import HttpResponse
def myHome(request):
return HttpResponse('app "cmdb" home')

数据库的基本增删改查

django有自己的orm.简单来说就是在models.py创建一个类就是创建一张表,类里的字段就生成一个列(也就是数据库的字段),一般每个APP都有自己的models.py

同样我也说不清楚这个,文档: 点击

创建表
  1. 在app的models.py加入代码:
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
age = models.IntegerField()
  1. 执行migrate

增删改查
#增
models.UserInfo.objects.create(username='sylar',password='123456',age=73)
dic = {'username':'tom', 'password':'123456','age':73}
models.UserInfo.objects.create(**dic)
# 查.all()所有,.filter('条件') .first() 第一条
models.UserInfo.objects.filter(age=73).first()
#删
models.UserInfo.objects.filter(username='tom').delete()
#查.all()所有,.filter('条件')
#改
models.UserInfo.objects.all().update(age=20)
models.UserInfo.objects.filter(username='tom').update(age=80)
user_list = models.UserInfo.objects.all()
数据展示的小例
  1. cmdb的views.py增加代码:
from django.shortcuts import render
def db_handle(request):
#自定义添加几条数据
user_list = models.UserInfo.objects.all()
return render(request,'db.html',{'li':user_list})
#使用render渲染,同时返回用户db.html和数据字典

2.cmdb的urls.py代码:

在url中增加db

urlpatterns = [
url(r'^myhome/', views.myHome),
url(r'^db/', views.db_handle),
]

3.在项目templates文件夹增加一个db.html代码

<table border="1">
<thead>
<tr>
<th>用户名</th>
<th>密码</th>
<th>年龄</th>
</tr>
</thead>
<body>
{% for item in li %}
//根据返回的数据字典的key 'li'循环数据
<tr>
<td>{{ item.username }}</td>
<td>{{ item.password }}</td>
<td>{{ item.age }}</td>
//将取得数据展示
</tr>
{% endfor %}
</body>
</table>

用户数据提交

PS: 如果用post方式提交要将settings里的MIDDLEWARE:'django.middleware.csrf.CsrfViewMiddleware',注释

db.html

    <form action="/cmdb/db/" method="post">
//action地址一定要以'/'结束.不然django会报错
<p><input type="text" name="username"/></p>
<p><input type="password" name="password"/></p>
<p><input type="text" name="age"/></p>
<p><input type="submit" value="提交"/></p>
</form>
def db_handle(request):

    if request.method == "POST":
#print(request.POST)
Age = int(request.POST['age'])
user_name = request.POST['username']
pass_word = request.POST['password']
dic = {'username': user_name, 'password': pass_word, 'age': Age}
models.UserInfo.objects.create(**dic)
#models.UserInfo.objects.create(**dic)
user_list = models.UserInfo.objects.all()
return render(request,'db.html',{'li':user_list})

了解了这些配合js,css就可以写简单又丑陋的网站了.....

Django入门(一)的更多相关文章

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

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

  2. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  3. python学习笔记--Django入门四 管理站点

    上一节  Django入门三 Django 与数据库的交互:数据建模 "管理员界面"是基础功能中的重要部分. django.contrib 包 Django自动管理工具是djang ...

  4. Django 入门

    Django 入门 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模型,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容 ...

  5. Django入门实践(三)

    Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...

  6. Django入门实践(二)

    Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...

  7. Django入门实践(一)

    Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...

  8. Django入门笔记

    Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...

  9. Django 入门案例开发(上)

    Django 入门案例开发(中) http://www.cnblogs.com/focusBI/p/7858267.html Django是一个重量级的web开发框架,它提供了很多内部已开发好的插件供 ...

  10. 【Python全栈-后端开发】Django入门基础-2

    Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1  变量(使用双大括号来引用变量) {{var_name}} 2  标签(tag)的使用 ...

随机推荐

  1. Spring 面试

    1.什么是Spring框架?Spring框架有哪些主要模块? spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...

  2. HDU 2298 Toxophily(公式/三分+二分)

    Toxophily Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. codevs1050

    题目地址:http://codevs.cn/problem/1050/ 分析: 最開始想直接用状压做,发现怎么都想不出来.就和当年的多行多米诺骨牌(这道题至少最后还是把普通状压做法看懂了). 直到听到 ...

  4. 19_Android中图片处理原理篇,关于人脸识别站点,图片载入到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写

    1载入图片到内存 (1).数码相机照片特别是大于3m以上的,内存吃不消,会报OutOfMemoryError,若是想仅仅显示原图片的1/8,能够通过BitmapFactory.Options来实现.详 ...

  5. 怎样提升 RailS 应用的性能?

    Is rails slow? 「铁路非常慢」,你或许听过这个笑话,那么我们的 Rails 框架呢? 假设说 Rails 慢,那么怎样提升 Rails APP 的性能就成了开发人员们最关注的问题. 或许 ...

  6. Spring学习笔记(三)之装配Bean

    除了组件扫描与自动装配之外还有基于Java代码的装配与基于XML的装配. 有一些场景是我们不能用自动装配的,比如我们要给第三方库中的组件装配到我们的应用中,这时自动装配无效,因为自动装配只能扫描本应用 ...

  7. Linux计划任务crontab

    Linux系统中存在两种工作调度的方式 周期性的(at),每隔一个固定的周期要来办的事项: 一次性的(crontab),做完一次以后就不会再执行: at at是个可以处理仅执行一次就结束调度的指令,不 ...

  8. Github开源项目(企业信息化基础平台)

    JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化).SCM(供应链系统).ERP(企业资源管理系统).CMS(内容管理系统).CRM(客户关 ...

  9. TypeScript学习笔记之类

    TypeScript的类,简单地定义如下: class Person { x: number; // 默认为public类型 y: number; constructor(x1: number, y1 ...

  10. 如何通过Mock API提高APP开发效率?

    APP开发过程中,如果可以在客户端的正常项目代码中,自然地(不影响最终apk)添加一种模拟服务器数据返回的功能,这样就可以很方便的在不依赖服务器的情况下展开客户端的开发. Mock API提供了这一问 ...