Django入门开发流程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ACanswer/article/details/81411804

最近刚开始学习django,本人菜鸟为了以后能快速回忆起来,现将开发基本流程总结如下:

注意事项:
	1、如果模板有变化要重新迁移,如果要迁移的数据库中不为空,则迁移失败,需要清空数据库。
	2、在这个编辑器中的tab键和空格可能不标准,使用该代码时要统一变为空格缩进。

###开发流程开始!
--创建虚拟环境:
	mkvirtualenv h2
--进入虚拟环境,安装django包:
	pip install django
--在合适的目录下创建项目:
	django-admin startproject test2
--在虚拟环境中安装mysql-python包:
	pip install mysql-python
--登录mysql数据库,创建一个新数据库:
	create database test2;
--在setting.py中修改数据库配置为:
	DATABASES = {
		'default': {
			#'ENGINE': 'django.db.backends.sqlite3',
			#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
			'ENGINE': 'django.db.backends.mysql',
			'NAME':'test2',
			'USER':'root',
			'PASSWORD':'000000',
			'HOST':'localhost',
			'PORT':'3306',
		}
	}
--创建应用:
	(h2) xuewudu@xuewudu:~/PycharmProjects/project2/test2$ python manage.py startapp booktest
--在setting.py中将应用booktest添加到最后一行,结果为:
	INSTALLED_APPS = [
		'django.contrib.admin',
		'django.contrib.auth',
		'django.contrib.contenttypes',
		'django.contrib.sessions',
		'django.contrib.messages',
		'django.contrib.staticfiles',
		'booktest',
	]
--在models.py中定义模型类:
	根据实际定义,也就是定义表结构。在此全部代码为:
	# -*- coding: utf-8 -*-
	from __future__ import unicode_literals

	from django.db import models

	# Create your models here.

	class BookInfoManager(models.Manager):
		def get_queryset(self):
			return super(BookInfoManager,self).get_queryset().filter(isDelete=False)
		def create(self,btitle,bpub_date):
			b=BookInfo()
			b.btitle=btitle
			b.bpub_date=bpub_date
			b.bread=0
			b.bcommet=0
			b.isDelete=False
			return b
		
	class BookInfo(models.Model):
		btitle=models.CharField(max_length=20)
		bpub_date=models.DateTimeField(db_column='pub_date')
		bread=models.IntegerField(default=0)
		bcommet=models.IntegerField(null=False)
		isDelete=models.BooleanField(default=False)
		class Meta:
			db_table='bookinfo'
		books1=models.Manager()
		books2=BookInfoManager()

		@classmethod
		def create(cls, btitle, bpub_date):
			b = BookInfo()
			b.btitle = btitle
			b.bpub_date = bpub_date
			b.bread = 0
			b.bcommet = 0
			b.isDelete = False
			return b
		
		def __str__(self):
			return self.btitle.encode('utf-8')

	class HeroInfo(models.Model):
		hname=models.CharField(max_length=10)
		hgender=models.BooleanField(default=True)
		hcontent=models.CharField(max_length=1000)
		isDelete=models.BooleanField(default=False)
		book=models.ForeignKey(BookInfo)

		def __str__(self):
			return self.hname.encode('utf-8')
		
--生成迁移(两条语句依次执行):
	(h2) xuewudu@xuewudu:~/PycharmProjects/project2/test2$ python manage.py makemigrations
	(h2) xuewudu@xuewudu:~/PycharmProjects/project2/test2$ python manage.py migrate
	此时数据库中已经自动生成表。
--在views.py中编写如下代码:
	# -*- coding: utf-8 -*-
	from __future__ import unicode_literals
	from models import *

	from django.shortcuts import render
	from django.db.models import Max,F,Q
	# Create your views here.
	def index(request):
		#list = BookInfo.books1.filter(heroinfo__hcontent__contains='八')   #某本书的英雄的结束包含‘八’的查询出来
		#list = BookInfo.books1.filter(pk__lte=2)    #查询编号小于等于2的
		#list = BookInfo.books1.filter(bread__gte=0)  #查询阅读量大于等于0的
		list = BookInfo.books1.filter(bread__lte=F('bcommet'))    #查询阅读量小于等于评论量的,不同属性比较使用F
		
		#list = BookInfo.books1.filter(bread__lte=4,btitle__contains='1')  #这两句效果相同,表示并列
		#list = BookInfo.books1.filter(bread__lte=4).filter(btitle__contains='1')

		list = BookInfo.books1.filter(Q(bread__lte=4) | Q(btitle__contains='1')  #这句表示并列,使用Q
	
		Max1 = BookInfo.books1.aggregate(Max('bpub_date'))   #查询最大的date,在index.html显示到Max1标签中
		context={'list':list,'Max1':Max1}
		return render(request,'booktest/index.html',context)
--在project2/test2/booktest下新建文件urls.py
--在project2/test2/test2中的urls.py中将上面新建的urls.py添加进去,全部代码如下:
	from django.conf.urls import include,url
	from django.contrib import admin

	urlpatterns = [
		url(r'^admin/', admin.site.urls),
		url(r'^',include('booktest.urls')),   #新添加部分
	]
--在project2/test2/booktest/urls.py中添加url地址映射,全部代码如下:
	from  django.conf.urls import url
	import  views

	urlpatterns = [
		url(r'^$',views.index)
	]
--在项目文件夹(test2)下新建文件夹路径为project2/test2/templates/booktest,(最后一个文件夹
要和应用同名,在此为booktest)在这个文件夹中新建index.html文件,编写相应代码,在此全部代码为:
	<!DOCTYPE html>
	<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Title</title>
	</head>
	<body>
	<ul>
	   {% for book in list %}
		<li>
			{{ book.btitle }}
		</li>
		{% endfor %}
	</ul>
	<hr>
	{{ Max1 }}
	</body>
	</html>
--在settings.py的TEMPLATES列表中添加模板路径,部分代码为:
	TEMPLATES = [
		{
			......
			'DIRS': [os.path.join(BASE_DIR,'templates')],
			......
		},
	]
--在admin.py中配置登录页面,用法为admin.site.register(模型类,admin类),在此全部代码为:
	# -*- coding: utf-8 -*-
	from __future__ import unicode_literals

	from django.contrib import admin
	from models import *
	# Register your models here.
	class HeroInfoInline(admin.TabularInline):
		model = HeroInfo
		extra = 3

	class BookInfoAdmin(admin.ModelAdmin):
		list_display = ['id','btitle','bpub_date','bcommet']
		list_filter = ['btitle']
		search_fields = ['btitle']
		list_per_page = 10
		fieldsets = [
			('base',{'fields':['btitle']}),
			('super',{'fields':['bpub_date','bcommet']})
		]
		inlines = [HeroInfoInline]

	admin.site.register(BookInfo,BookInfoAdmin)
	admin.site.register(HeroInfo)
--在虚拟环境h2中创建超级管理员,命令如下:
	python manage.py createsuperuser
--在虚拟环境h2中启动服务器,命令如下:
	python manage.py runserver
--打开浏览器输入120.0.0.1:8000就可以进入到Django主页面了。

猜你喜欢

转载自blog.csdn.net/ACanswer/article/details/81411804
今日推荐