Django 杂记

ericBlog项目地址
sundyblog项目地址

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>
posted @ 2017-10-15 23:42  icanactnow  阅读(189)  评论(0编辑  收藏  举报