本文根据慕课网Djiango学习视频学习。
前言:发现学习的东西,一段时间没有用,就又忘记了,迷迷糊糊的。不行的写下来,做个记录。
该文很大部分参考了慕课网django的学习视频。
项目创建开发流程
在相关环境搭建好之后,使用pycharm新建项目。方便快捷。
1.创建虚拟环境
目的就是每个项目的使用的包分开,如果不用虚拟环境,每个项目的三方包都安装在同一个环境下,增大体积
1.安装 virtualenv
image.png2.在指定的目录创建虚拟文件目录
image.png3.进入创建的目录下的Scripts执行activete.bat
image.png进入虚拟环境。pip list 查看安装的库
image.png
退出执行 deactivate.bat
用pychorm创建项目的时候,就选择这个环境
2.创建项目,并观察目录
django-admin startproject myblog
创建项目.以下是初始化的项目结构。
image.png
WSGI: Python服务器网管接口(不修改)
URLS:配置URL
Setting:(核心部分)
3.1创建App应用
在pycharm中,也能生成app>tooks>
image.png
输入 命令 startapp “名字” 就能生成app模块
一些细节注意
创建static 目录用于存放静态html文件
。需要在setting中设置引用静态文件的配置
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
创建log目录用于存放log日志
因为涉及到存放文件 所以创建 media目录。
重点:
后面可能有多个app,所以创建apps目录,把app名字拖入.会自动创建init.py
把app名字 mark成sorcuess.。在setting 设置 才能识别sys.path.insert(0, os.path.join(BASE_DIR, "apps"))
应用目录
image.png
migrations 数据迁移模块
admin.py 后台管理系统配置
apps.py 当前应用的一些配置。没什么意思
models.py 数据模块 (ORM)
test.py 自动化测试,测试脚本
views.py 执行响应的逻辑代码(重要)
3.3修改端口号
python manage.py runserver 9090 image.png3,3.开启服务:
CMD窗口下该目录下 python manage.py runserver image.png此时可以在浏览器打开改地址。显示正确就说明成功了。
==================
创建第一个界面:
UR分发,都要传递一个request对象,
在views.py中编辑
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello world").
Urls配置的优化,由于项目越来越大。在blog 应用中创建urls 配置url后缀
image.png
提示,新版的django,在url中不用r这些正则
image.png如果存在多个app了,可以在每个app下设置urls,并使用include来()导入
image.png
这样子整个请求地址为 image.png
3.3模板的创建,什么是template
HTML文件,模板语言 DTL
3.4创建模板
1.在APP 的根目录下,即blog下创建 templates的目录
在该目录下创建HTML代码,index.html文件
在views.py中返回一个render()
render(reuest,"*.html",字典)
该字典是后台传递到模板的参数,键为参数名
def login(request):
return render(request, 'index.html', {"hello": "我是蒲小帅"})
在index.html中获取
<h1>{{hello}}</h1>就能获取到我是蒲小帅
****注意
Django按照InSTALLED_APPS的添加顺序查找Templates,不同APP下Templates目录下的同名.html会造成冲突
解决方法:
在templates目录下创建于app目录相同的文件夹,并将html文件放在其中。
3.5models介绍
在生成app应用目录时,自动为我们创建了models.py,并引入models
有了model,把其生成为数据表
3.6生成数据表
1.python manage.py makemigrations app(名) 可选,不写的话,该应用所有的都生成数据迁移。 image.png2.python manage.py migrate image.png
3.查看sql的语句 python manage.py sqlmigrate blog 0001 image.png
关联MySql数据库
在setting.py中修改,前提是已经创建了数据库
过程中提示没有数据库驱动,就要到虚拟环境中安装。
image.png
到mysqlclient下载 mysqlclient-1.3.10-cp34-cp34m-win_amd64.whl。放到 虚拟环境录下。用pip install 解压他。
然后在客户端,使用。
生成默认数据表 image.png
在app下的model中创建类来操作数据字段。
比如: image.png
然后mannager.py 先执行 makemigrations messages,在执行 makemigrations message这是app名字。
migrate message进行查看过程。在navatat中可以看到默认创建djiaogo_message的表,以及字段
image.png
常用数据类型
models.ForeignKey
models.DateField
models.IntegerField
models.IPAddressField
models.FileField
models.ImageField
image.png
image.png
创建超级账户
createsuperuser
image.png
xadmin
比admin界面更友好
推荐github上下载源码,使用django2分支,解压复制xadmin目录到app同级目录下。可能有相关内容没导入,用pycharm自行导入解压。
在setting.py中添加
INSTALLED_APPS = [
# 'django.contrib.admin',
'xadmin',
'crispy_forms',注意这里有个逗号
]
导入 xadmin
,url中设置xamin
image.png
xadmin一些配置
1.配置主题,在user.admin中设置
class BaseSeting(object):
enable_themes=True
use_bootswatch=True
xadmin.site.register(views.BaseAdminView,BaseSeting)
必写在最后注册不能写在第一位。不然估计初始化错误。
class GlobalSettings(object):
site_title="后台管理系统" #左上角文字
site_footer="@蒲小帅"#下方文字
menu_style="accordion" #设置菜单为收缩
xadmin.site.register(views.CommAdminView,GlobalSettings)
设置菜单显示为中文,也就是app下面的文字
1.在相应的app(operation)的app.py下添加 verbose_name="用户操作"
2.2,在init下写 default_app_config="operation.apps.OperationConfig"
前端uiSemantic-UI
继续学习
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
urls中参数传递,
def hello(request,name):
name="你好,%s" %name
return HttpResponse(name)\
...
path('hello/<name>',views.hello)
image.png
带?/?name就需要用get
def hi(request):
name=request.GET.get("name")
return HttpResponse("你好,"+name)
...
path('hi/',views.hi)
image.png
url命名,反转url
image.png比如 在redirect('/cms/'),需要改变的时候,需要改很多地方,那么我们就给他取个名字,就算地址变了,名字没变。
第一步:path('hi/',views.hi,name="login")
第二步: from django.shortcuts import redirect,reverse
redirect(reverse('login'))
命名空间
cms,front中的urls的path的名称name都一样,重复了,那么在views中就不知道找谁。在多个app之间,可能产生同名的url,反转就会混淆
在各自的urls中,指定
app_name='front'
....
反转的地方
reverse('front.login')
模板引擎
falsk jinjia2 django DTL模板引擎
两种渲染方式:
1.render_to_string
def index(request):
html=render_to_string('index.html')
return HttpResponse(html)
2.render
return render(request,'index.html')
模板路径设置
‘DIRS’,查找路径,是个列表可设置多个,
‘APP_DIRS’=true,如果在DIRS下没找到,优先在当前app中寻找,找不到会在安装了的app中看有没有teamplates。(INSTALLED_APPS下,添加‘app’)
模板变量,语法,if,for
DTL常用过滤
add 把数据转成int,在跟value进行相加
{{value|add:"2"}}
flask {{ url_for('xxx',xxx='')}}
cut
{{value | cut :" "}} 剪掉空格
相当于 replace(args,"")
date
{{birthday | date:''Y/m/d"}}
2018/12/27
模板继承
{% extends 'xxx'%}
{% block body%}
{% endblock%}
跟flask一样
{{block.super}}继承父模板
{% url 'xxx'%}
加载静态文件
image.png 'builtins':['django.templatetags.static']
#不与app下的static相关
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
网友评论