Django小示例
创建项目,在命令行中输入:django-admin startproject mysite
则会创建一个名为mysite的项目。项目结构如下:
+mysite
|--+ugo
| |--+migrations
| |--__init__.py
| |--admin.py
| |--apps.py
| |--models.py
| |--tests.py
| |--views.py
|--+mysite
| |--+__pycache__
| |--__init__.py
| |--settings.py
| |--urls.py
| |wsgi.py
|--manage.py
|--db.sqlite3
|--+templates
|--+static
manage.py是主要的管理程序。
db.sqlite3是在执行完python manage.py migrate之后产生的,用于对应数据库。
urls.py用于指明什么样的url对应哪一种方法的对应关系。
settings用于设置整个项目,例如加入什么功能。
wsgi.py部署到主机上才会用到。
在mysite目录下执行 python manage.py startapp ugo ,会在mysite下创建一个app。ugo文件夹中包含__init__.py文件,说明
它是作为一个可导入的包,所以需要导入ugo才能看到这个模块中的内容。需要在settings中的变量INSTALLED_APPS中加
入ugo。
views.py用于编写被调用函数的具体实现
如果有必要设置模板template文件,让正确的模板在views.py中可调用,用于把函数执行完的结果转移到对应的模板中。可自行在mysite下创建文件夹templates存放html文件。创建完后在settings.py中把TEMPLATES变量中的DIRS的设置为templates的具体位置,例'DIRS': [os.path.join(BASE_DIR,'templates').repalce('\\','/')],
如果有必要设置models.py,建立与数据库的对应关系。
模板的使用
1.在setting.py中设置templates模板的目录
2.在urls.py中设置网址与函数(index)的映射
3.创建在templates下创建编辑index.html文件
4.在views.py视图中编辑index函数,函数返回的经过加工和传参的Index.html文件以HttpResponse(html)的形式
5.在model.py中设置存储数据的模板,用于和数据库进行交互
设置urls.py的网址与函数的对应关系
ffrom django.conf.urls import url
from django.contrib import admin
from ugo.views import index
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',index)
]
url()的第一个参数是正则表达式。用于匹配网址域名后的内容,r'^$'表示域名后没有任何内容,即http://localho
st:8000/这个网址,则会调用函数index.正则表达式中使用小括号括起来的部分会被当作参数,传给后面的函数。
在templates目录下创建index.html文件(使用{{now}}把变量now传入)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>
我的第一个Django网站
</title>
</head>
<body>
<h1>欢迎光临</h1>
<h2>现在时刻: {{now}}</h2>
</body>
</html>
如果传递的变量是列表形式,在模板中可用for循环:
<h3>User lists</h3>
<ul>
{% for user in userlist %}
<li>{{user.name}}</li>
{% empty %}
<p>There is no user in the list</p>
{% endfor %}
</ul
{% for user in userlists %}和{% endfor %} 是一对。如果userlists是空列表就会显示放在{% empty %}下的内容。
编辑views.py的index(request)函数
from django.http import HttpResponse
from django.template.loader import get_template
from datetime import datetime
def index(request):
template=get_template('index.html')
html=template.render({'now':datetime.now})
return HttpResponse(html)
导入HttpResponse把输出的内容转换成HTTP的格式。
使用get_template()加载index.html文件,然后使用方法render()以字典形式传入变量now.对与多个入参变量,可以
使用locals()方法,它的功能是以字典形式返回所有当前在内存中的局部变量。例
template=get_template('index.html')
now=datetime.now
userlists=list()
userlist.append({'nane':'Richard'})
userlist.append({'nane':'John'})
userlist.append({'nane':'Mary'})
html=template.render(locals())
就可以把now,userlists这两个变量一并传递到template.renders中
这时在mysite目录下运行python manage.py runserver ,然后在浏览器中输入http://localhost:8000就会看到
‘欢迎光临!’这几个字。
tempalte中的模板也可以设置一个基础模板,然后在个性化的模板中继承该模板
例,编写基础模板:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{%block title %}{% endblock %}</title>
<body>
<header>...</header>
<nav>...</nav>
{% block main %} {% endblock %}
<footer>...</footer>
</body>
</head>
</html>
保存为base.html,然后在子模板中使用 extends这个文件,,然后设置title和content就可以了
{% extends 'base.html' %}
{% block title %} 欢迎光临 {% endblock %}
{% block main % }
...这里放所有想要呈现的index.html中的主要内容...
{% endblock %}
详情可参考 https://docs.djangoproject.com/en/1.7/topics/templates/
关于静态文件,不需要设置url与函数对应(通过函数来加工),直接显示要获取的文件,就是静态文件。在settings.py中
设置静态文件的根网址 STATIC_URL='/static/',
也就是网址前部分为http://localhost:8000/static时就会直接到静态文件目录读取文件。
设置静态文件的本地路径 STATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),],在项目路径下创建文件夹static,在static里可按文件类别分别创建文件夹js,css,images.
在templates模板文件中获取静态文件:
...省略...
{% load staticfiles %}
<img src="{% static 'images/logo.png' %}" width=150/>
...省略...
5.models.py的基本格式如下:
class urllist(models.Model):
src_url=models.URLField()
short_url=models.CharField(max_length=20)
count=models.PositiveIntegerField()
def __unicode__(self):
return self.short_url
models中的数据类型及特性,具体可查看 https://docs.djangoproject.com/en/1.9/ref/models/fields/
在models中创建class,存盘后,可使用命令 python manage.py check 以确认所有设置的正确性。
python manage.py makemigrations ugo,最后的ugo表示我们创建的app ugo。
c:\pythonScripts\mysite>python manage.py check
System check identified no issues (0 silenced).
c:\pythonScripts\mysite>python manage.py makemigrations ugo
Migrations for 'ugo':
ugo\migrations\0001_initial.py
- Create model urllist
c:\pythonScripts\mysite>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, ugo
Running migrations:
Applying ugo.0001_initial... OK
以上三步都没报错,说明这个数据表已经被创建完成,可以拿来使用了。
可以启用django预装的admin功能操作DB.sqlite3数据库。
在APP目录(ugo)下找到admin.py,将我们的数据模型做好注册即可:
from django.contrib import admin
# Register your models here.
from ugo.models import urllist
admin.site.register(urllist)
然后创建数据库的管理员账号
python manage.py createsuperuser
Username: admin
Email address: skynet.tw@gmail.com
Password:
Password (again):
在启动web服务器(python manage.py runserver)后,在浏览器中输入:localhost:8000/admin就可看到数据库
登陆界面,登陆后可看到admi主界面。
Django小示例的更多相关文章
- ReactNative新手学习之路06滚动更新ListView数据的小示例
本节带领大家学习使用ListView 做一个常用的滚动更新数据示例: 知识点: initialListSize={200} 第一次加载多少数据行 onEndReached={this.onEndRea ...
- MVC客户端验证的小示例
MVC客户端验证的小示例 配置客户端验证的可用性: <configuration> <appSettings> <add key="ClientValidat ...
- 【.Net】Socket小示例
引言 项目中用到了Socket,这里做个控制台小示例记录一下. Client 客户端的Receive用了异步方法,保持长连接,可以随时发送消息和响应服务端的消息,如下 static string Cl ...
- Django+小程序技术打造微信小程序助手 ✌✌
Django+小程序技术打造微信小程序助手 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 从零到一的完整项目开发实战过程,项目开发聚焦重要知识点,先原理后实战 ...
- CentOS7 安装 RocketMQ 实践和小示例
CentOS7 安装 RocketMQ 实践和小示例 1.通过 SSH 工具(比如 XShell)连接到 CentOS7 服务器上: 2.进入到 /usr/local 目录中: cd /usr/loc ...
- Django+小程序技术打造微信小程序助手
Django+小程序技术打造微信小程序助手 整个课程都看完了,当前这个课程的分享可以往下看,下面有某盘的链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,同时也分享下自己的总结 ...
- Django 小实例S1 简易学生选课管理系统 12 CSS样式完善
Django 小实例S1 简易学生选课管理系统 第12节--CSS样式完善 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块的逻辑代码到这里 ...
- Django 小实例S1 简易学生选课管理系统 11 学生课程业务实现
Django 小实例S1 简易学生选课管理系统 第11节--学生课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,学生需要拥 ...
- Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现
Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...
随机推荐
- hdu 6168 Numbers
Numbers Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...
- Unity3D学习笔记(十五):寻路系统
动画生硬切换:animation.play();//极少使用,常用融合方法 动画融合淡入:animation.CrossFade(“Idle”, 0.2f);//0.2f为与前一动画的融合百分比为20 ...
- Linux-Ubuntu14.04下mongodb安装部署
mongo 下载:https://www.mongodb.com/download-center/community?jmp=nav 创建目录,将下载的文件放在如下位置 xxx@ubuntu:/usr ...
- 【Jmeter】Jmeter 5.0新特性
前言 Jmeter 5.0这次的核心改进是在许多地方改进了对 Rest 的支持,此外还有调试功能.录制功能的增强.报告的改进等. 我也是因为迁移到了Mac,准备在Mac上安装Jmeter的时候发现它已 ...
- Axel and Marston in Bitland CodeForces - 782F (bitset优化)
题目链接 $dp[0/1][i][x][y]$表示起始边为0/1, 走$2^i$ 步, 是否能从$x$走到$y$ 则有转移方程 $dp[z][i][x][y]\mid=dp[z][i-1][x][k] ...
- Big Problems for Organizers CodeForces - 418D (贪心,直径)
大意: 给定n结点树, m个询问, 每次给出两个旅馆的位置, 求树上所有结点到最近旅馆距离的最大值 先考虑一些简单情形. 若旅馆只有一个的话, 显然到旅馆最远的点是直径端点之一 若树为链的话, 显然是 ...
- qxx项目大文件上传
1. 在做大文件上传的时候,要注意修改文件的配置,php.ini的配置,还有连接时间.这些东西都记不清了,明天需要问一下芳哥,然后遇到问题的时候就能自己解决了. 2. 然后就遇到一个很尴尬的问题:大文 ...
- 『Python』pycharm常用设置
学习一下pycharm的快捷操作,提升速度,也提升舒适度,笑. 常用快捷键 ctrl + d :复制粘贴本行到下一行 ctrl + y :删除本行 ctrl + 鼠标点击 :跳转 ctrl + / : ...
- python-day43--单表查询之关键字执行优先级(重点)
一.关键字的执行优先级(重点) 1.关键字执行优先级 from where #约束条件(在数据产生之前执行) group by #分组 没有分组则默认一组 按照select后的字段取得一张新的虚拟表, ...
- Eclipse重命名项目名后如何彻底修改工程名
背景:在Eclipse中当我们修改了一个Web项目名称后,在再次运行该项目,发现使用新的名称无法正常的浏览,而用旧的名称去可以 解决方案: 1:修改该项目目录下:.project文件 <?xml ...