Django初学入门不完全指南(避免雷区)

0.所使用的版本(用前须知)

电脑系统:Windows 10
Python:3.5(此版本Python兼容1.8以上所有版本Django,3.7对低版本Django不兼容)
Django:1.8.2(Django2和Django1在一些指令上有一些出入,想用Django2的需要自己找一下教程)
Python版本与Django的兼容性:(绿色代表兼容,红色代表不兼容)
Python版本与Django的兼容性

1.创建虚拟环境

使用mkvirtualenv指令

	pip install virtualenv  # 安装虚拟环境
	pip install virtualenvwrapper  # 安装虚拟环境扩展包
	mkvirtualenv 虚拟环境名  # 创建虚拟环境,例:mkvirtualenv bj18-py3

另一种指令

	python -m venv bj18-py3  # 这个指令是在其他教程里面看到的,推荐使用mkvirtualenv指令

激活虚拟环境

	bj18-py3\Scripts下 activate.bat  # 直接输入activate(输入a按tab)也可以

这是Windows系统下的激活方法,Linux系统的激活方法是workon 虚拟环境名

退出虚拟环境

	deactivate  # 在虚拟环境中输入即可,不用到Scripts里

安装Django1.8.2

	pip install django==1.8.2  # 到pycharm的setting里安装也可以,但记得要勾选specifiied version

2.项目创建

在bj18-py3\bj18文件夹下(bj18是新建的文件夹,不创建此文件夹也可以)

	django-admin startproject test1

设置语言和时区

bj18\test1\test1\settings.py

	LANGUAGE_CODE = 'zh-hans'
	TIME_ZONE = 'Asia/Shanghai'

创建app

bj18\test1

	django-admin startapp booktest

安装app

bj18\test1\test1\settings.py

	INSTALLED_APPS = []   # 后面加上'booktest'

设置model

bj18\test1\booktest\models.py里面,定义需要的类(详见第3部分)

迁移表

bj18\test1

	python manage.py makemigrations
	python manage.py migrate

运行服务器

bj18\test1

	python manage.py runserver

默认的网页是http://127.0.0.1:8000
有时候,执行runserver的时候会显示端口被占用,这时可以在runserver后面自己指定ip和端口

终止服务器

Keyboard Intertupt:按键Ctrl + C

3.设置模型类

定义一个模型类

class 类名,例:

	class BookInfo(models.Model):  # HeroInfo同理

变量设置:

	# 图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度
	btitle = models.CharField(max_length=20)
	# 出版日期,DateField说明是一个日期类型
	bpub_date = models.DateField()

说明:常见的Model字段类型

  • IntegerField 整数
  • DecimalField 固定精度的十进制数,max_digits=数字最大位数,decimal_places=小数最大位数
  • CharField 字符串字段,max_length=最大字符数
  • BooleanField 布尔字段,如果想要用null为空值,使用NullBooleanField
  • DateField 日期字段,auto_now=True最后修改日期,auto_now_add对象创建日期
  • DateTimeField 时间和日期字段,同样可以使用auto_now和auto_now_add
  • FloatField 浮点数字段
  • ImageField 图片字段
  • TextField 大文本字段
  • TimeField 时间字段,同样可以使用auto_now和auto_now_add
  • URLField 保存URL的字符串字段,max_length=最大长度,默认200
  • EmailField 邮箱字段,max_length=最大长度,默认75,改成254兼容所有
  • FileField 文件上传字段,不支持primary_key和unique,upload_to=保存文件的本地文件系统

在网页上显示的是BookInfo,想要显示书名:

	def __str__(self):
		# 返回书名
		return self.btitle

通过模型操作表(示例)

bj18\test1
增加数据:

	python manage.py shell
	from booktest.models import BookInfo
	b = BookInfo()
	b.btitle = '天龙八部'
	from datetime import date
	b.bpub_date = date(1990, 1, 1)
	b.save()

通过模型类名查找表中数据:

	BookInfo.objects.get(id=1)  # 直接返回所有信息
	b2 = BookInfo.objects.get(id=1)
	b2.btitle
	b2.bpub_date  # 查找信息 多查一

修改:

	b2.bpub_date = date(1990, 10, 10)

注意:修改完要保存才能生效

	b2.save()

删除:

	b2.delete()

书下面所有的英雄:

	b.heroinfo_set.all()  # 英雄类的外键是书 一查多 

查所有:

	BookInfo.objects.all()
	HeroInfo.objects.all()

4.后台管理

新建管理员

bj18\test1

	python manage.py createsuperuser

登录管理员界面:http://127.0.0.1:8000/admin/

注册模型类:

bj18\test1\admin.py

	from .models import BookInfo, HeroInfo  # .models不好使时尝试使用booktest.models
	admin.site.register(BookInfo)
	admin.site.register(HeroInfo)

此时在上面的网址上就会出现Booktest(没出现的可以重新运行runserver)

以表格形式显示(自定义模型管理类)

bj18\test1\admin.py

	class BookInfoAdmin(admin.ModelAdmin):
		list_display = ['id', 'btitle', 'bpub_date']

英雄类的自定义同上
最后在注册模型类后面加上BookInfoAdmin
bj18\test1\admin.py

	admin.site.register(BookInfo, BookInfoAdmin)

5.视图函数

一个简单的视图函数

1.定义视图函数,HttpRequest

bj18\test1\booktest\views.py

	# http://127.0.0.1/index
	def index(request):
		# 进行处理,和M、T进行交互
		return HttpResponse('hello world')

2.进行url配置,建立url地址和视图的对应关系

bj18\test1\test1\urls.py

	urlpatterns = [
		url(r'^admin/', include(admin.site.urls)),  # 配置项目
		url(r'^', include('booktest.url')),  # 包含booktest应用中的url文件,只需要匹配开头
		# Django2的url配置与Django1不同,需要特别注意
	]

bj18\test1\booktest\urls.py(这个需要自己新建一个)

	from django.conf.urls import url
	from . import views  # 这块如果报错可以尝试一下from booktest import views
	urlpatterns = [
		# 通过url函数设置url路由配置项
		url(r'^index', views.index),  # 建立/index和视图index之间的关系
		]
	]

输入http://127.0.0.1:8000/index,就会出现hello world

查找顺序

  • 先到应用的urls.py查找,第二个匹配成功
  • 执行对应的处理动作
  • 到booktest\urls.py里面查找,匹配成功
  • 到视图查找views.index

配置url时有两种语法格式

	url(正则表达式, 视图函数名)
	url(正则表达式, include(应用中的urls文件))

注意:

  • 这时候去输入http://127.0.0.1:8000/,会因为匹配不到对应的网页而报错。如果想要让http://127.0.0.1:8000/显示成http://127.0.0.1:8000/index,可以在bj18\test1\booktest\urls.py里面添加一行:
   url(r'^$', views.index)
  • 斜杠的兼容:如果想要网页输入http://127.0.0.1:8000/index和http://127.0.0.1:8000/index/都显示index,则要补充正则:
   url(r'^index[/]?$', views.index)  # [/]?表示有0个或1个斜杠

6.模板操作

创建模板文件夹

在项目文件夹下新建templates文件夹,用于盛放html文件
为了不混淆应用,再在templates下面新建个booktest文件夹

配置模板目录

	from django.template import loader, RequestContext  # 需要导入的模块
	# 1.加载模板文件
	temp = loader.get_template('booktest/index.html')
	
	# 2.定义模板上下文(给模板文件传递数据)
	context = RequestContext(request, {})
	
	# 3.模板渲染(产生标准的html内容)
	res_heml = temp.render(context)
	
	# 4.返回给浏览器
	return HttpResponse(res_heml)

实际使用时,可以把这四步封装在一个函数中

   	def my_render(request, template_path, context_dict={}):
   		"""使用模板文件"""
   		# 1.加载模板文件
   		temp = loader.get_template(template_path)

   		# 2.定义模板上下文(给模板文件传递数据)
   		context = RequestContext(request, context_dict)

   		# 3.模板渲染(产生标准的html内容)
   		res_heml = temp.render(context)

   		# 4.返回给浏览器
   		return HttpResponse(res_heml)

使用模板变量:可以在html中使用从视图中传递过来的数据(上下文字典)

   	模板代码段:{% 要执行的代码 %}
   	模板变量使用:{{ 模板变量名 }}  <-- 模板变量名就是上下文字典当中的键 -->

for循环:

   	{% for i in list %} 
   		中间是网页内容
   	{% endfor %}

如果for循环为空:

   	{% for i in list %} 
   		中间是网页内容
   	{% empty %}
   		for循环遍历为空时要执行的语句
   	{% endfor %}

以上就是Django入门,现在可以愉快地做项目了!
我在学Django的时候,可以说是一步一个坎,现在把自己学到的经验分享一下,帮助大家少走弯路。
第一次做博客不容易,如果觉得这篇文章对你有帮助,请点个赞吧!
最后附上一些参考链接:

  1. 解决使用pycharm写html时代码不能自动补全的问题
  2. 更好地理解Django当中的视图
  3. Windows下安装mysqlclient失败的解决方法
  4. 后续内容:Model属性及后端配置
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值