Django基础知识

创建Django项目

upload successful

django目录结构


保存django项目的urls、settings、uwsgi文件

新建项目app

upload successful

manage.py@djangodemo > startapp message
"C:\Program Files\JetBrains\PyCharm 2017.1.2\bin\runnerw.exe" C:\Users\jianhu.yong\Envs\testvir01\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2017.1.2\helpers\pycharm\django_manage.py" startapp message C:/Users/jianhu.yong/PycharmProjects/djangodemo
Following files were affected
C:\Users\jianhu.yong\PycharmProjects\djangodemo\message\apps.py
C:\Users\jianhu.yong\PycharmProjects\djangodemo\message\views.py
C:\Users\jianhu.yong\PycharmProjects\djangodemo\message\__init__.py
C:\Users\jianhu.yong\PycharmProjects\djangodemo\message\admin.py
C:\Users\jianhu.yong\PycharmProjects\djangodemo\message\tests.py
C:\Users\jianhu.yong\PycharmProjects\djangodemo\message\models.py
C:\Users\jianhu.yong\PycharmProjects\djangodemo\message\migrations\__init__.py
Process finished with exit code 0
新建静态文件夹

upload successful
upload successful
upload successful
主要存放静态文件 js css img等

新建日志文件夹

upload successful

新建用户上传文件夹

upload successful

新建apps package

upload successful
upload successful

upload successful
集中管理diango app

将message app移动至apps文件夹内

upload successful
upload successful
upload successful

当我们在其他目录导入message时候,需要通过apps.message来导入!
例如:from apps.message import views
直接import message会提示错误

upload successful

当我们想通过import message import views导入却发现有错误,这是需要将apps目录标记为Sources Root即可,但是又会带来另外一个问题,在命令行里面启动django项目,会提示message找不到的错误,这时需要修改settings配置文件中的BASEDIR变量即可!

sys.path.append(os.path.join(BASE_DIR,'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

upload successful

C:\WINDOWS\system32>workon

Pass a name to activate one of the following virtualenvs:
==============================================================================
testvir01

C:\WINDOWS\system32>workon testvir01
(testvir01) C:\Windows\System32>cd C:\Users\jianhu.yong\PycharmProjects\djangodemo\

(testvir01) C:\Users\jianhu.yong\PycharmProjects\djangodemo>dir
驱动器 C 中的卷没有标签。
卷的序列号是 D8C0-E83A

C:\Users\jianhu.yong\PycharmProjects\djangodemo 的目录

2018/06/28 10:32 <DIR> .
2018/06/28 10:32 <DIR> ..
2018/06/28 10:37 <DIR> .idea
2018/06/27 17:29 <DIR> apps
2018/06/27 17:19 <DIR> djangodemo
2018/06/27 17:19 <DIR> log
2018/06/28 10:32 807 manage.py
2018/06/27 17:20 <DIR> media
2018/06/27 17:19 <DIR> static
2018/06/27 17:19 <DIR> templates
1 个文件 807 字节
9 个目录 45,607,804,928 可用字节

(testvir01) C:\Users\jianhu.yong\PycharmProjects\djangodemo>python manage.py runserver
Traceback (most recent call last):
File "manage.py", line 4, in <module>
import message
ImportError: No module named message

(testvir01) C:\Users\jianhu.yong\PycharmProjects\djangodemo>
Django留言板项目简单实战

upload successful

安装mysql-python
Windows安装mysql-python
settings配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb01',
'USER':'root',
'PASSWORD':'root',
'HOST':'127.0.0.1'

}
}
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',
],
},
},
]
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
]
migration生成数据表
manage.py@djangodemo > makemigrations
"C:\Program Files\JetBrains\PyCharm 2017.1.2\bin\runnerw.exe" C:\Users\jianhu.yong\Envs\testvir01\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2017.1.2\helpers\pycharm\django_manage.py" makemigrations C:/Users/jianhu.yong/PycharmProjects/djangodemo
No changes detected
manage.py@djangodemo > migrate
"C:\Program Files\JetBrains\PyCharm 2017.1.2\bin\runnerw.exe" C:\Users\jianhu.yong\Envs\testvir01\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2017.1.2\helpers\pycharm\django_manage.py" migrate C:/Users/jianhu.yong/PycharmProjects/djangodemo
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying sessions.0001_initial... OK

Process finished with exit code 0
编写views.py
views.py
def getform(request):
return render(request, 'message_form.html')
配置urls.py
urls.py
from django.conf.urls import url
from django.contrib import admin
from message.views import getform

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^form/',getform, name='form_get')
]
静态文件配置
message_form.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<form action="{% url 'form_get' %}" method="POST" class="smart-green">
<h1>留言信息
<span>请留下你的信息.</span>
</h1>
<label>
<span>姓名 :</span>
<input id="name" type="text" name="name" value=
{% if not message.name == 'bobbytest' %}
'bobby has test'
{% else %}
bobby
{% endif %} class="error" placeholder="请输入您的姓名"/>
<div class="error-msg"></div>
</label>

<label>
<span>邮箱 :</span>
<input id="email" type="email" name="email" value="{{ message.email }}" placeholder="请输入邮箱地址"/>
<div class="error-msg"></div>
</label>

<label>
<span>联系地址 :</span>
<input id="address" type="text" name="address" value="{{ message.address }}" placeholder="请输入联系地址"/>
<div class="error-msg"></div>
</label>

<label>
<span>留言 :</span>
<textarea id="message" name="message" placeholder="请输入你的建议">{{ message.message }}</textarea>
<div class="error-msg"></div>
</label>
<div class="success-msg"></div>
<label>
<span>&nbsp;</span>
<input type="submit" class="button" value="提交"/>
</label>
{% csrf_token %}
</form>

</body>
</html>
style.css
.smart-green {
margin-left: auto;
margin-right: auto;
max-width: 500px;
background: #F8F8F8;
padding: 30px 30px 20px 30px;
font: 12px Arial, Helvetica, sans-serif;
color: #666;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
}

.smart-green h1 {
font: 24px "Trebuchet MS", Arial, Helvetica, sans-serif;
padding: 20px 0px 20px 40px;
display: block;
margin: -30px -30px 10px -30px;
color: #FFF;
background: #9DC45F;
text-shadow: 1px 1px 1px #949494;
border-radius: 5px 5px 0px 0px;
-webkit-border-radius: 5px 5px 0px 0px;
-moz-border-radius: 5px 5px 0px 0px;
border-bottom: 1px solid #89AF4C;
}

.smart-green h1 > span {
display: block;
font-size: 11px;
color: #FFF;
}

.smart-green label {
display: block;
margin: 0px 0px 5px;
}

.smart-green label > span {
float: left;
margin-top: 10px;
color: #5E5E5E;
}

.smart-green input[type="text"], .smart-green input[type="email"], .smart-green textarea, .smart-green select {
color: #555;
height: 30px;
line-height: 15px;
width: 100%;
padding: 0px 0px 0px 10px;
margin-top: 2px;
border: 1px solid #E5E5E5;
background: #FBFBFB;
outline: 0;
-webkit-box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2);
box-shadow: inset 1px 1px 2px rgba(238, 238, 238, 0.2);
font: normal 14px/14px Arial, Helvetica, sans-serif;
}

.smart-green textarea {
height: 100px;
padding-top: 10px;
}


.smart-green .button {
background-color: #9DC45F;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-border-radius: 5px;
border: none;
padding: 10px 25px 10px 25px;
color: #FFF;
text-shadow: 1px 1px 1px #949494;
}

.smart-green .button:hover {
background-color: #80A24A;
}

.error-msg{
color: red;
margin-top: 10px;
}
.success-msg{
color: #80A24A;
margin-top: 10px;
margin-bottom: 10px;
}
启动Django服务

http://127.0.0.1:8000/form/

upload successful

0%