Django 基础命令
- 新建django项目
django-admin.py startproject projectName
- 新建django app
python manage.py startapp appName
- 创建数据库表或更改数据库表字段
# 创建更改文件
python manage.py makemigritions
# 将生成的py文件应用到数据库
python manage.py migrate
- 运行服务器
python manage.py runserver 8000
- 清空数据库
python manage.py flush #清除数据留下空表
- 创建管理员&修改密码
python manage.py creatsuperuser
python manage.py changepassword username
- 导入数据导出数据
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
- 进入数据库命令行
python manage.py dbshell
第一个Django项目
返回为文字
- python3.5.1 Django1.11.1 pycharm mac
参考教程 - 使用pycharm创建diango项目
#或者使用控制台命令创建项目
django-admin startproject projectName
- 从终端创建app
python3 manage.py startapp appName
def hello(request):
return HttpResponse('hello django! i am eric')
- 在urls 里面进行路由部署
from cmdb import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/',views.hello),#设置好路由以及处理路由分配的函数
]
- 设置好ip以及访问端口运行,通过浏览器访问
返回一个html 页面
- 首先在temples 里面创建一个html文件
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my first django app</title>
</head>
<body>
<h1 style ="background-color: darkgreen;color: #fefefe;"> hello eric!<h1>
</body>
</html>
- 修改app里面的views.py的返回值
def hello(request):
# return HttpResponse('hello django! i am eric')
return render(request,'index.html')
- 修改setting
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],#增加此行,要让项目知道html放到那快了
'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',
],
},
},
]
- 运行
使用静态文件
以制作博客为例子
setting 里面的设置
STATIC_URL = '/blogjs/'#这里的名字和放静态文件的路径一样
STATICFILES_DIRS= (
os.path.join(BASE_DIR, 'blogjs'),#这里的名字和放静态文件的路径一样
)
- index.html路径设置
设置index.html里的所有路径以/blogjs/..开头
href="/blogjs/..."
接收用户发送的数据
- 创建提交密码表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my first django app</title>
</head>
<body>
<h1 style ="background-color: darkgreen;color: #fefefe;align-content: center">请输入账号及密码登录 <h1>
<form action="/index/" method="post">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" value ="提交">
</form>
<script src="/static/js/jquery.js"></script>
</body>
</html>
- 修改处理函数以获取返回值
def hello(request):
# return HttpResponse('hello django! i am eric')
if request.method=="POST":
name = request.POST.get('username',None)
password=request.POST.get('password',None)
print(name,password)
return render(request,'index.html')
- 修改setting
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',#关闭Django的进制跨站访问
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- 运行提交数据即可
返回动态页面
- 在函数中增加用户列表,并将数据放回给浏览器用来显示
# 创建用户信息列表
user_list = [
{'user': 'jack', 'pwd': 'abc'},
{'user': 'tom', 'pwd': 'ABC'},
]
def hello(request):
# return HttpResponse('hello django! i am eric')
if request.method == "POST":
username = request.POST.get('username', None)
password = request.POST.get('password', None)
temp = {'user': username, 'pwd': password}
user_list.append(temp)
return render(request, 'index.html', {'data': user_list})#最后一个参数返回给浏览器
- 使用jinja2模板语言显示对应参数
<h1>用户信息展示<h1>
<table border="1">
<thead>
<th>用户名</th>
<th>密码</th>
</thead>
<tbody>
{% for line in data %}
<tr>
<td>{{ line.user }}</td>
<td>{{ line.pwd }}</td>
</tr>
{% endfor %}
</tbody>
</table>
链接数据库
- 首先在setting注册app,以便让数据库知道给哪个APP创建表
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'cmdb',#注册app,这样数据库才知道给哪个APP创建表。
]
- 选择数据库
这里选默认的sqlit3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
- 在models.py中创建要映射数据库的模型
# Create your models here.
#创建两个映射类,一张存储作者信息,一张存储文章信息
class Author(models.Model):
name = models.CharField(max_length=32)#定义表字段
age = models.IntegerField()
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(Author)
- 在admin.py中注册模型
# Register your models here.
# 着这里注册模型,以便建立映射
from blog.models import Article, Author
admin.site.register(Author)
admin.site.register(Article)
- 建立数据库版本备份,以便后面升级使用
#控制台中
python3 manage.py makemigerations
- 同步数据库(在数据库中建表)
python3 manage.py migrate
- 注册管理员账户
python3 manage.py createsuperuser
- 在urls.py设置管理员路径
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
- 修改服务函数
def hello(request):
# return HttpResponse('hello django! i am eric')
if request.method == "POST":
username = request.POST.get('username', None)
password = request.POST.get('password', None)
temp = {'user': username, 'pwd': password}
# user_list.append(temp)
# 将数据保存到数据库中
models.userInfo.objects.create(user = username,pwd=password)
#从数据库中将数据读出
user_list = models.userInfo.objects.all()
return render(request, 'index.html', {'data': user_list})#最后一个参数返回给浏览器
项目地址
- 模板
def hello(request):
name = 'Sundy'
age = 18
return render(request,'hello.html',locals())
#
简易博客细小知识点
路由中
url(r'^blog/', blog.views.hello),#r是忽略转义符号的意思,^是头匹配&是尾匹配
处理函数中
def hello(request):
name = 'eric'
age = 18
return render(request,'hello.html',locals())#locals()以为将上面参数以字典形式发送给html
返回html中
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>welcomeEric</title>
</head>
<body>
#{{ 这里面通过key可以获得对应的值|这后面是过滤器 }}
<h1> Hello {{ name|lower }} ! Age: {{ age|add:2 }} </h1>
</body>
</html>
js 页面传值
- 利用URL传少量参数
a.html
{% for a in articles %}
<div class="fh5co-entry padding">
<img src="/blogjs/images/project-1.jpg" alt="Free HTML5 Bootstrap Template by FreeHTML5.co">
<div id="pp">
<span class="fh5co-post-date">eric.</span>
<h2><a href=/blogjs/single.html?content={{ a.content }}>{{ a.title }}</a></h2> //将参数通过拼接到url后面,注意HTML及js注释用//,
<p id="content">{{ a.content }}</p>
</div>
</div>
{% endfor %}
b.html
<div id="pp">
<script type="text/javascript">
urlinfo = window.location.href;//通过该语句获得当前页面的url
//下面是对url进行切割,筛出自己想要的信息
len = urlinfo.length;
offset = urlinfo.indexOf("?");
newsidinfo=urlinfo.substr(offset,len);
newsids = newsidinfo.split("=");
//将信息在div块中显示
document.write(decodeURI(newsids[1]));
</script>