django 基础及应用
django 项目创建及基本设置
创建项目
- 打开命令行提示符,找到虚拟环境文件夹里面的 Script 文件夹,输入命令
activate
进入虚拟环境 - 在虚拟环境下进入项目文件夹,输入命令
django-admin startproject test
,创建名为 test 的项目 - 进入项目文件夹,输入命令
python manage.py startapp student
,在项目里创建名为 student 的应用
创建完成后我们可以查看下项目的目录结构:
$ cd HelloWorld/
$ tree
.
|-- test
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- manage.py
目录说明:
- test: 项目的容器。
manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
test/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
test/settings.py: 该 Django 项目的设置/配置。
test/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站”目录”。
test/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。
配置项目
- 使用 pycharm 打开项目,并将环境改为我们配置好的虚拟环境
- 打开主项目 test 里面的 setting.py 文件,找到里面的
INSTALLD_APPS
项,加入应用 student,代码如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'student' # 加入student应用
]
- 在总工程项目文件夹下创建名为 templates 的文件夹,用于存放我们的html模板,模板里面是我们数据和视图的展示
- 回到 setting.py 文件,找到
TEMPLATES
项的'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',
],
},
},
- 找到
DATABASES
项修改代码如下 :
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test', # 对应数据库里数据库名
'HOST': 'localhost',
'USER': 'root',
'PASSWORD': '123456',
'PORT': '3306',
}
}
- 打开主项目 test 的 init.py 文件,输入代码如下:
import pymysql
pymysql.install_as_MySQLdb()
通过以上操作,我们已经完成了一个不加图片的django项目的配置。
django 模型
进入应用 student 中的 models.py 文件,代码如下:
class Student(models.Model):
stu_id = models.AutoField(primary_key=True)
stu_name = models.CharField(max_length=10)
stu_sex = models.BooleanField()
class Meta:
db_table = 'student'
在这里我们创建了一个学生对象,并为其定义了三条属性,下面介绍一下常用的模型字段:
模型字段
CharField
:字符串
max_length
:长度BooleanField
:布尔类型DateField
: 年月日,日期
auto_now_add
: 第一次创建的时候赋值
auto_now
:每次修改的时候赋值DateTimeField
:年月日 时分秒
auto_now_add
auto_now
AutoField
:自动增长DecimalField(max_digits=3, decimal_places=1)
:
max_digits
:总位数
decimal_places
:小数后多少位TextField
:存文本信息IntegerField
:整数FloatField
:浮点FileField
:文件上传字段ImageField
:上传图片
upload_to
=”” 指定上传图片的路径
模型参数
default
: 默认
null
:设置是否为空,针对数据库中该字段是否可以为空
blank
:设置是否为空,针对表单提交该字段是否可以为空
primary_key
:创建主键
unique
:唯一
创建了模型之后,我们将其提交到数据库,打开pycharm下方的控制台 Terminal 或者在命令行提示符进入虚拟环境后进入项目,输入命令
python manage.py makemigrations # 让django知道我们的模型变更
python manage.py migrate # 创建表结构
这样我们就在数据库里面创建了项目的相关数据表
视图和URL配置
在 test 目录下的 test 目录找到 urls.py 文件,并输入代码:
from django.conf.urls import url, include # 添加include方法
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'student/', include('stu.urls')),
]
接下来我们在 student 应用文件夹下创建名为 urls.py 的文件,进入文件添加代码如下:
from django.conf.urls import url
from student import views
urlpatterns = [
url(r'addstu/', views.add_stu),
url(r'showstu/', views.show_stu)
]
url() 函数
Django url() 可以接收四个参数,分别是两个必选参数:regex、view 和两个可选参数:kwargs、name,接下来详细介绍这四个参数。
regex: 正则表达式,与之匹配的 URL 会执行对应的第二个参数 view。
view: 用于执行与正则表达式匹配的 URL 请求。
kwargs: 视图使用的字典类型的参数。
name: 用来反向获取 URL。
Django 模板
我们在 templates 目录下创建 addStu.html 文件并进入,添加代码如下:
<body>
<form action="/student/addstu/" method="post">
<input type="text" name="name">
<input type="text" name="sex">
<input type="date" name="birth">
<input type="submit" value="提交">
<form>
<body>
在 templates 目录下创建 showStu.html 并进入,添加代码如下:
{% for stu in stus %}
id: {{ stu.stu_id }} <br>
姓名:{{ stu.stu_name }} <br>
性别:{% if stu.stu_sex %}
男
{% else %}
女
{% endif %} <br>
<br>
{% endfor %}
然后在 student 目录下找到 views.py 文件并进入,添加代码如下:
def add_stu(request):
# 添加学生信息
if request.method == 'GET':
return render(request, 'addStu.html')
if request.method == 'POST':
# 处理提交的学生信息
stu_id = request.POST.get('id')
stu_name = request.POST.get('name')
if request.POST.get('sex') == '男':
stu_sex = 1
else:
stu_sex = 0
# objects 对象
# 通过模型来获取学生,向数据库中输入数据
Student.objects.create(
stu_id=stu_id,
stu_name=stu_name,
stu_sex=stu_sex,
)
return HttpResponse('添加学生信息成功')
def show_stu(request):
stus = Student.objects.all()
# 选择所有学生信息,并将信息返回给网页输出
return render(request, 'showStu.html', {'stus': stus})
接下来我们进入 test 目录输入以下命令,启动服务器:
python manage.py runserver 0.0.0.0:8000
0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000。
访问 http://127.0.0.1:8000/student/addstu/ ,可以看到页面:
这样我们就完成了使用模板来输出数据,从而实现数据与视图分离。我们可以在页面录入信息并提交到数据库的对应表中,接下来我们详细介绍模板中常用语法规则。
Django模板标签
if/else标签
基本语法格式如下:
{% if condition %}
... display
{% endif %}
或者:
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
根据条件判断是否输出。if/else 支持嵌套。
{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ) 。
for 标签
{% for %} 允许我们在一个序列上迭代。
与Python的 for 语句的情形类似,循环语法是 for X in Y ,Y是要迭代的序列而X是在每一个特定的循环中使用的变量名称。
每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。
上面 showStu.html 里面的代码很好的展示了两个标签的用法
注释标签
Django 注释使用{# #}。
{# 这是一个注释 #}
或者:
{% comment %}
这是一个注释
{% endcomment %}
过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:
{{ name | lower}}
{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写。过滤管道可以被 套接 、,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
{{ my_list|first|upper }}
以上实例将第一个元素并将其转化为大写。