Django入门

来源:互联网 发布:mac应用程序开发 编辑:程序博客网 时间:2024/04/29 15:41

前几天看了Python的一些基础知识,然后又了解了一下相关的web框架,比较主流的有Django和Flask,比较了一下之后决定学Django,基础供能比较完善,对于初学者应该更友好一些。一边跟着大神的博客做,一边整理了这篇博客,没什么新的东西,只是我个人的学习笔记,其中一些部分我专门修改成不太一样的东西,以免学习过程中不求甚解的忽略。总的来说大神这篇博客非常不错,如果你是刚学习了Python的基础语法,想要试着做点什么,那么就跟着下面的参考资料中,大神的博客过一遍吧,很有趣很简单,就能撸一个网站的demo了。

参考资料Leo_wlCnBlogs

源码下载

在此由衷感谢作者的分享。

安装PyCharm

直接搜索PyCharm下载安装Windows专业版,这里有专业版注册码。

创建project

安装完成之后会提示创建新的project,里边就能够直接选择创建Django项目,点击之后如果你没有Django会自动安装,这里要挂VPN。下载之后选择目录,就会自动创建目录了。直接运行,就能够看到第一个页面。
这里写图片描述

这时候还没有myapp文件夹和static文件夹,经过下边的步骤才有。

创建APP

完成上边的步骤之后,虽然能运行服务器了,但是还不能显示我们所需要的内容。接下来创建app。在pycharm下方的terminal终端中输入命令:python manage.py startapp myapp
这样就创建了一个叫做myapp的APP,django自动生成“myapp”文件夹。

然后把我们新定义的app加到settings.py中的INSTALL_APPS中。

编写路由

路由都在urls文件中,首先导入队形的app的views文件from myapp import views然后在urlpatterns之中加上url映射url(r'^index/', view.index),
这样,用户在浏览器中输入的url就会映射到相应的业务处理逻辑上了。

编写业务处理逻辑

业务处理逻辑在views.py文件中。

from django.shortcuts import HttpResponsedef index(request):    # request.POST    # request.GET    return HttpResponse('hello world!')

通过编写路由和业务处理逻辑,我们将index这个url指向了views里的index()函数,它接收用户请求,并返回一个hello world 字符串。

运行web服务

命令行运行方式:python manage.py runserver 127.0.0.1:8000
在pycharm中,可以直接按按绿色小三角的按键来运行。成功之后下方还会显示连接,点击即可打开相应的页面。
如果有错误,Django会在页面中详细显示错误内容。根据上边的步骤打开,会发现出现 404错误,这是因为我们指定的是index页面,只要在url后边加上index即可。

返回HTML文件

首先写一个index.html
然后修改一下views文件:
1.首先pycharm一般会自动帮你导入Django的render模块。没有的话要记得加上
2.然后把之前的index函数改为:

def index(request):    # request.POST    # request.GET    #return HttpResponse('hello world!')    #下边的参数request是固定的,第二个参数是指定的文件,即index.html    return render(request,'index.html')

当你想返回一个html文件时,就要使用render方法来渲染(其实就是打包的意思)。render是Django提供的方法和规则,直接使用即可。

为了让Django知道我们的html文件在哪里,需要修改settings文件的相应内容。但是由于是Django给我们创建的工程目录,所以默认情况下它知道我们的html就放在template这个文件夹下边,我们无需修改。

频繁重启时,由于端口为释放的原因,可能会启动不了服务,修改下端口就OK了。

使用静态文件

现在我们已经能够返回html了,但是肯定不能少了css和js,这样前端才算完整。在Django中,一般将静态文件放在static目录中,这里就自己来创建一个static目录。然后在目录下放置css和js。
为了让Django找到这个目录,依然需要对settings进行配置。尤其这个static目录是我们自己创建的Django还不知道它是干嘛的。打开之后挥发新啊在settings文件的底部,Django已经为我们预留了位置,直接设置即可。

如图

按照上图进行设置之后,就可以在html中引入js和css了。
这里写图片描述

重启刷新即可看到结果。

接受用户发送的数据

接下来就要让web服务器和用户之间进行交互了。我们在html中设计一个表单,让用户输入信息,再提交给index这个url,服务器将收到这些数据:
1.修改html,加个表单:

<h1>input your massage:</h1><form action="/index/" method="post">    <input type="text" name="name" placeholder="input your name">    <input type="text" name="age" placeholder="input your age">    <input type="submit" value="submit"></form>

2.修改views.py文件,业务逻辑index函数:

def index(request):    if request.method == 'POST':        name = request.POST.get('name',None)        age  = request.POST.get('age',None)        print(name,age)    return render(request,'index.html',)

3.此事直接使用会出错,因为Django有一个跨站请求保护的安全机制,我们在settings文件中把下列语句注释掉:

MIDDLEWARE = [    'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.common.CommonMiddleware',    #'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',]

接下来就能正常工作了,在浏览器中输入提交之后,我们能在pycharm中看到相应的数据。

返回动态页面

上一节我们能收到用户数据了,但是返回给用户的还是静态页面。一般来说,我们收到数据之后会在后台进行处理,之后再返回给用户。

这时候Django采用jinja2语言编写动态模板,jinja2会根据提供的数据,替换掉html中的相应部分。

模板引擎:模板引擎分为前端模板引擎和后端模板引擎,其区别在于是否在浏览器上渲染模板、填充数据。vue,react,angularjs等mvvm框架也自带模板输出模块,他们也属于前端模板引擎。
另外,除了mvvm前端框架自带的模板输出模块在浏览器跑之外,其他前端js模板引擎大多数都是基于nodejs服务器运行的,所以,js模板引擎!= 前端模板引擎(部分模板引擎可以在浏览器跑)。

进一步了解可以看看这篇博客

jinjia2语言来写模板的语法可以在这里学习

详细语法入门后再深入学习。

接下来,改造views.py文件:

user_list = [    {'user':'Jack','age':'16'},    {'user':'Tom','age':'20'},    {'user':'Alex','age':'26'}]def index(request):    if request.method == 'POST':        name = request.POST.get('name',None)        age = request.POST.get('age',None)        temp = {'name':name,'age':age}        user_list.append(temp)    return render(request,'index.html',{'data':user_list})

然后改造index.html文件,插入jinjia2模板语法:

<h1>user list</h1><table>     <tr>         <th>name</th>         <th>age</th>     </tr>     // jinjia2模板语法的循环和插值     {% for line in data %}         <tr>             <td>{{ line.name }}</td>             <td>{{ line.age }}</td>         </tr>     {% endfor %} </table>

使用数据库

上边已经实现了跟用户的输入输出,就剩在数据库里边保存数据了。Django通过自带的ORM框架操作数据库,并且自带轻量级的SQLite数据库。接下来操作试试:

1.在settings文件中注册app:

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    #在这里加入你创建的app文件夹名    'myapp']

不注册它,你的数据库就不知道给哪个app创建表。

2.在settings中,配置数据库相关的参数,如果使用自带的SQLite,则不需要修改:

DATABASES = {    'default': {        # 在这里指定使用的数据库类型,这里指定了Django自带的轻量数据库SQLite3,初学直接用它就好了,这里就不改了。        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    }}

3.编辑models.py文件,也就是MTV中的M:

# 这边要继承这个models.Model类,固定写法class UserInfo(models.Model):    #创建2个字段,最大长度32,类型是char    name = models.CharField(max_length=32)    age = models.CharField(max_length=32)

我们创建了两个字段分别保存名字和年龄。

4.在pycharm的teminal中通过命令创建数据库的表。这里需要2条命令:

python manage.py makemigrations

输入之后会在app中的migrations文件夹中创建一个新文件。、

再输入:

python manage.py migrate

来同步数据库,之后会出来一大堆OK。

5.修改views.py中的业务逻辑:

def index(request):    if request.method == 'POST':        name = request.POST.get('name',None)        age = request.POST.get('age',None)        # 添加数据到数据库        models.UserInfo.objects.create(name=name,age=age)    # 从数据库中读取所有数据    user_list = models.UserInfo.objects.all()    return render(request,'index.html',{'data':user_list})

重启web服务器,刷新页面之后,就能跟用户进行数据交互了,在上边书写提交,然后在下边显示出来。

至此一个简单的Django项目就完成了。

Django总结

跟着大神的思路走了一遍之后,发现Django确实是一个非常棒的框架,功能强大,常用的东西都帮你集成好了,作为初学者,没有什么大坑,一步步认真跟过来就能完成了。最后,大神的建议我深以为然:学习新东西的时候,不要一开始就扎入细节,先对整理有个认识,了解知识框架,再学习基本内容,最后再深入。之前看了Python的语法,看了挺久的,也写不出什么东西,今天跟着这个博客走了一遍, 一个简单的demo就出来了。接下来我只要在它的基础上修修补补,增加功能,就能完成简单的网站了,在过程中,遇到哪里不懂的,再去搜索学习,解决问题,我觉得这样的学习方式效果好,而且不枯燥,很有成就感。
0 0
原创粉丝点击