django 引用css失效_发布学习django的第一个项目

f83fc5c083c81b66ad335f6d50091c74.png

Python Web之Django初识

0.导语

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

1.安装及配置

#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及显示时间实例

# 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下面):

       hello {{ time }}


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

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

方法一:settings别名

settings.py

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

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

/templates/index.html

<div id="div1">
    
   hello {{ time }}
div>
// 注意这里访问jquery文件时,必须用别名访问,否则报错,资源找不到。
<script src="/static/jquery-3.3.1.js">script>
<script>
    $('#div1').css("color",'red')script>

总结

先在根目录下定义一个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标签下加

{% load staticfiles %}

form表单里面加

<script src={% static "jquery-3.3.1.js" %}>script>
位置如下:
<div id="div1">
    
   hello {{ time }}
div>
<script src={% static "jquery-3.3.1.js" %}>script>
<script>
    $('#div1').css("color",'red')script>

4.提交数据并展示

userInfor.html

<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

url(r'^userInfor/', views.userInfor)

views.py

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表单时遇到如下错误:

Forbidden (403)
CSRF verification failed. Request aborted.

解决方法:

1、在表单Form里加上{% csrf_token %}
"/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_exemptdef userInfor(req):
.............
另一种办法就是直接注释掉settings.py >MIDDLEWARE>'django.middleware.csrf.CsrfViewMiddleware',

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

5.1原版

# 首先创建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

<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

# 添加以下代码
path('userInfor/', views.userInfor),

/dbreq/views.py

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

# 创建数据库
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文件写完后,生成表

# 生成相应的表:
python manage.py makemigrations
python manage.py migrate

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

python manage.py createsuperuser

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

# admin.py
from django.contrib import admin

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

此时后台如下界面:

79934a10979f77f0744dfeef5f4b8895.png

此时进行增加数据操作

http://127.0.0.1:8000/userInfor/

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

040837d7433ba7684cf3e96121c7bca8.png
12c55f4e653a4b0567b245153526602a.png

5.2更新版

更新内容

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

urls.py

 path('show/', views.show),

views.py

def show(req):
    info_list=models.UserInfor.objects.all() # 取出该表所有数据

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

show.html

<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

62ccaeddecb46d513e7fc9ecb3732920.png
5.2.2 delData页面

urls.py

path('delData/', views.delData),

views.py

# 删除操作
@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

ab64e7175f6cb80b1ba22f8047c8b5f6.png
5.2.3 updateData页面

urls.py

path('updateData/', views.updateData),

views.py

# 修改操作
@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

1fb5f1dd0425e96757c3303b2be6ac25.png

37f02b07b4e94b96b0266af0d547675e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值