前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >发布学习django的第一个项目

发布学习django的第一个项目

作者头像
公众号guangcity
发布2019-09-20 17:16:15
9970
发布2019-09-20 17:16:15
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

Python Web之Django初识

0.导语

最近看到很多人在学django,我就来发一篇这方面的文章,本文的项目地址请点击阅读原文,即可跳转,欢迎star,fork!

1.安装及配置

代码语言:javascript
复制
#0  安装:
pip3 install django
#1  创建project:
django-admin startproject mysite
       ---mysite
          ---settings.py # 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
          ---url.py # 路由  负责把URL模式映射到应用程序。
          ---wsgi.py # 协议
       ---- manage.py(启动文件)  # Django项目里面的工具,通过它可以调用django shell和数据库等。
#2  在mysite目录下创建blog应用:
    python manage.py startapp blog
        ---blog
          ---__init__.py
          ---admin.py
          ---apps.py
          ---migrations
            ---__init__.py
          ---models.py
          ---tests.py
          ---views.py
#3  启动django项目:
     python manage.py runserver 8080
#4  生成同步数据库的脚本:
     python manage.py makemigrations
       同步数据库:
     python manage.py migrate
#5 访问后台管理系统:
        为进入这个项目的后台创建超级管理员:
     python manage.py createsuperuser,设置好用户名和密码后便可登录啦!
     http://127.0.0.1:8080/admin/
#6  清空数据库:
     python manage.py  flush
#7  查询某个命令的详细信息:
     django-admin.py  help  startapp
#8  启动交互界面:
     python manage.py  shell
            这个命令和直接运行 python 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。
#9  查看详细的列表:
     python manage.py   

2.hello django及显示时间实例

代码语言:javascript
复制
# urls.py
添加path('show_time/', views.show_time),
# 修改views(视图)
# **每一个视图必须有一个形参,客户端/浏览器发送服务器之后,服务器返回浏览器打包的信息对象,全在request里面**
1.效果一:访问页面显示hello
# **导入HttpResponse,HttpResponse('hello')返回给前端的实例对象**
def show_time(request):
      return HttpResponse('hello')
2.效果二:访问页面显示hello,hello封装到模板index.html中。
def show_time(request):
      return render(request,"index.html")
3.效果三:访问页面显示hello django,并显示当前时间
def show_time(request):
    t=time.ctime()
# 将字符串time以键值对绑定当前时间点,并发送给前端,前端index.html中{{time}}将time对应的内容渲染出来
    return render(request,"index.html",{'time':t})
# 新增index.html(放置templates下面):
<div>
    <!--两个大括号去渲染一个变量-->
       hello {{ time }}
</div>

访问记得:http://localhost:端口/show_time

3.引用资源文件(例如引用jquery)

方法一:settings别名

settings.py

代码语言:javascript
复制
# 前端用的这个别名(虚拟路径),是对后面statics的替换,为了维护方便
STATIC_URL = '/static/' # 别名

# 以下为添加的内容,注意元组/列表填写路径,否则报错
# 物理路径/绝对路径
STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'statics'),
)

/templates/index.html

代码语言:javascript
复制
<div id="div1">
    <!--两个大括号去渲染一个变量-->
   hello {{ time }}
</div>
// 注意这里访问jquery文件时,必须用别名访问,否则报错,资源找不到。
<script src="/static/jquery-3.3.1.js"></script>
<script>
    $('#div1').css("color",'red')
</script>

总结

代码语言:javascript
复制
先在根目录下定义一个statics包文件夹,然后在下面放置jquery资源文件,为了让django读取到此文件,则必须更改settings.py中相关设置,在settings.py把statics添加进去,看上述代码,注意别名问题,所谓别名就是为了维护方便,在所有HTML处引用时只需使用别名访问,而不管资源文件(比如jquery)文件名的不断改变。若用资源文件名(例如将上述/statci改为/statics)则报错,资源文件找不到!!!

#django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找
#<script src="/statics/jquery-3.1.1.js"></script>
#------error-----不能直接用,必须用STATIC_URL = '/static/':
#<script src="/static/jquery-3.1.1.js"></script>

方法二:

不能去掉settings.py上面加的STATICFILES_DIRS meta标签下加

代码语言:javascript
复制
{% load staticfiles %}

form表单里面加

代码语言:javascript
复制
<script src={% static "jquery-3.3.1.js" %}></script>
代码语言:javascript
复制
位置如下:
<div id="div1">
    <!--两个大括号去渲染一个变量-->
   hello {{ time }}
</div>
<script src={% static "jquery-3.3.1.js" %}></script>
<script>
    $('#div1').css("color",'red')
</script>

4.提交数据并展示

userInfor.html

代码语言:javascript
复制
<h1>创建个人信息</h1>

<form action="/userInfor/" method="post">

    <p>姓名<input type="text" name="username"></p>
    <p>性别<input type="text" name="sex"></p>
    <p>邮箱<input type="text" name="email"></p>
    <p><input type="submit" value="submit"></p>

</form>

<hr>

<h1>信息展示</h1>

<table border="1">

    <tr>
        <td>姓名</td>
        <td>性别</td>
        <td>邮箱</td>
    </tr>
    {% for i in info_list %}

        <tr>
            <td>{{ i.username }}</td>
            <td>{{ i.sex }}</td>
            <td>{{ i.email }}</td>
        </tr>

    {% endfor %}

</table>

url.py

代码语言:javascript
复制
url(r'^userInfor/', views.userInfor)

views.py

代码语言:javascript
复制
info_list=[]

def userInfor(req):

    if req.method=="POST":
        username=req.POST.get("username",None)
        sex=req.POST.get("sex",None)
        email=req.POST.get("email",None)

        info={"username":username,"sex":sex,"email":email}
        info_list.append(info)

    return render(req,"userInfor.html",{"info_list":info_list})

dos下运行python manage.py runserver 8000 http://localhost:8000/userInfor/ 在使用Django提交Post表单时遇到如下错误:

代码语言:javascript
复制
Forbidden (403)
CSRF verification failed. Request aborted.

解决方法:

代码语言:javascript
复制
1、在表单Form里加上{% csrf_token %}
<form action="/index/" method="post">
    {% csrf_token %}
......

2、在Settings里的MIDDLEWARE增加配置:(一般默认就有)

    'django.middleware.csrf.CsrfViewMiddleware',
我的版本是Django2.0.3,如果是以前版本,则为MIDDLEWARE_CLASSES配置。
3.在views中的方法上面加上@csrf_exempt(记得引入包)注解
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def userInfor(req):
.............

另一种办法就是直接注释掉settings.py >MIDDLEWARE>'django.middleware.csrf.CsrfViewMiddleware',

5.提交数据至数据库,并在后台管理操作

5.1原版

代码语言:javascript
复制
# 首先创建django项目,其项目目录如下:
exa
  ---dbreq
    ---migrations
      ---__init__.py
    ---admin.py
    ---apps.pyy
    ---models.py
    ---tests.py
    ---views.py
  ---exa
    ---__init__.py
    ---settings.py
    ---urls.py
    ---wsgi.py
  ---templates
    ---userInfor.html
  ---db.sqlites
  ---manage.py

/templates/userInfor.html

代码语言:javascript
复制
<h1>创建个人信息</h1>
<form action="/userInfor/" method="post">
    {% csrf_token %}
    <p>姓名<input type="text" name="username"></p>
    <p>性别<input type="text" name="sex"></p>
    <p>邮箱<input type="text" name="email"></p>
    <p><input type="submit" value="submit"></p>
</form>
<hr>
<h1>信息展示</h1>
<table border="1">
    <tr>
        <td>姓名</td>
        <td>性别</td>
        <td>邮箱</td>
    </tr>
    {% for i in info_list %}
        <tr>
            <td>{{ i.username }}</td>
            <td>{{ i.sex }}</td>
            <td>{{ i.email }}</td>
        </tr>
    {% endfor %}
</table>

/exa/urls.py

代码语言:javascript
复制
# 添加以下代码
path('userInfor/', views.userInfor),

/dbreq/views.py

代码语言:javascript
复制
from django.shortcuts import render
from dbreq import models
from django.views.decorators.csrf import csrf_exempt
# Create your views here.
@csrf_exempt
def userInfor(req):
    if req.method == "POST":
        u = req.POST.get("username", None)
        s = req.POST.get("sex", None)
        e = req.POST.get("email", None)
        info={"username":u,"sex":s,"email":e}
        models.UserInfor.objects.create(**info)
        info_list=models.UserInfor.objects.all()
        return render(req, "userInfor.html", {"info_list":info_list})
    return render(req, "userInfor.html")

models.py

代码语言:javascript
复制
# 创建数据库
from django.db import models

# Create your models here.
class UserInfor(models.Model):
    username=models.CharField(max_length=64)
    sex=models.CharField(max_length=64)
    email=models.CharField(max_length=64)

以上.py文件写完后,生成表

代码语言:javascript
复制
# 生成相应的表:
python manage.py makemigrations
python manage.py migrate

为项目后台数据库设置账户

代码语言:javascript
复制
python manage.py createsuperuser

此时运行python manage.py runserver 8088,然后http://localhost:8088/admin 登录账户后,会发现无表,此时需要对admin.py进行修改

代码语言:javascript
复制
# admin.py
from django.contrib import admin

# Register your models here.
from dbreq import models
# 把models创建的表添加到admin后台中
admin.site.register(models.UserInfor)

此时后台如下界面:

此时进行增加数据操作

代码语言:javascript
复制
http://127.0.0.1:8000/userInfor/

页面创建表,后台实时更新成功,如图!

5.2更新版

更新内容

代码语言:javascript
复制
1.数据库后台修改了一行数据并添加了一行;
2.增加show页面,将原先提交的数据可在另一个页面访问到
3.删除数据并呈现操作
4.更新数据并呈现数据
5.2.1 show页面

urls.py

代码语言:javascript
复制
 path('show/', views.show),

views.py

代码语言:javascript
复制
def show(req):
    info_list=models.UserInfor.objects.all() # 取出该表所有数据

    return  render(req,'show.html',{'info_list':info_list})

show.html

代码语言:javascript
复制
<table border="1">
    <thead>
         <tr>
            <td>姓名</td>
            <td>性别</td>
            <td>邮箱</td>
        </tr>
    </thead>
    <tbody>
        {% for i in info_list %}
            <tr>
                <td>{{ i.username }}</td>
                <td>{{ i.sex }}</td>
                <td>{{ i.email }}</td>
            </tr>
        {% endfor %}
    </tbody>
</table>

python manage.py runserver

5.2.2 delData页面

urls.py

代码语言:javascript
复制
path('delData/', views.delData),

views.py

代码语言:javascript
复制
# 删除操作
@csrf_exempt
def delData(req):
    # 删除数据
    info_list = models.UserInfor.objects.filter(username='哈哈哈')
    return render(req, "show.html", {"info_list": info_list})

python manage.py runserver

5.2.3 updateData页面

urls.py

代码语言:javascript
复制
path('updateData/', views.updateData),

views.py

代码语言:javascript
复制
# 修改操作
@csrf_exempt
def updateData(req):
    models.UserInfor.objects.filter(username='哈哈哈').update(sex='女',email='yixiugai@163.com')
    info_list = models.UserInfor.objects.all()
    return render(req,"show.html",{"info_list":info_list})

python manage.py runserver

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python Web之Django初识
    • 0.导语
      • 1.安装及配置
        • 2.hello django及显示时间实例
          • 3.引用资源文件(例如引用jquery)
            • 方法一:settings别名
            • 方法二:
          • 4.提交数据并展示
            • 5.提交数据至数据库,并在后台管理操作
              • 5.1原版
              • 5.2更新版
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档