搜索
简帛阁>技术文章>用django创建一个简单的sns

用django创建一个简单的sns

1.首先创建一个工程newsns

django-admin.py startproject newsns

在工程目录下新建一个文件夹templates,在settings.py文件中对该模版路径进行配置:

 1 import os
 2 
 3 ROOT_DIR = os.getcwd()
 4 
 5 
 6 TEMPLATE_DIRS = (
 7     # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
 8     # Always use forward slashes, even on Windows.
 9     # Don't forget to use absolute paths, not relative paths.
10     ROOT_DIR + '/templates/',
11 )

然后在templates文件夹下创建一个模版index.html:

<title>newsns -by django</title>
<h1><font color=#{{color}}>Django, my first django program.</font></h1>

参照上篇文章中创建模版的方法,将app目录下的settings.py文件、views.py文件和urls.py文件进行相应设置。

2.创建数据库,配置数据

在app目录下的settings.py中进行如下设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'newsns',                      # Or path to database file if using sqlite3.
        'USER': 'root',                      # Not used with sqlite3.
        'PASSWORD': '***',                  #密码.
        'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

增加app newsns:

 1 INSTALLED_APPS = (
 2     'django.contrib.auth',
 3     'django.contrib.contenttypes',
 4     'django.contrib.sessions',
 5     'django.contrib.sites',
 6     'django.contrib.messages',
 7     'django.contrib.staticfiles',
 8     # Uncomment the next line to enable the admin:
 9     # 'django.contrib.admin',
10     # Uncomment the next line to enable admin documentation:
11     # 'django.contrib.admindocs',
12     'newsns',
13 )

在控制台中使用mysql命令创建数据库newsns

mysql> create database newsns default character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.03 sec)

然后在app目录下创建一个models.py文件,该文件创建了3个类,实际上每个类代表一个表格,类的字段为表的字段。

 1 #coding:utf-8
 2 
 3 from django.db import models
 4 
 5 class newsns(models.Model):
 6     name = models.CharField(max_length = 30)
 7     content = models.CharField(max_length = 140)
 8 
 9 #以下代码可以不要
10 class Publisher(models.Model):
11     name = models.CharField(max_length=30)
12     address = models.CharField(max_length=50)
13     city = models.CharField(max_length=60)
14     state_province = models.CharField(max_length=30)
15     country = models.CharField(max_length=50)
16     website = models.URLField()
17 
18 class Author(models.Model):
19     first_name = models.CharField(max_length=30)
20     last_name = models.CharField(max_length=40)
21     email = models.EmailField()
22 
23 class Book(models.Model):
24     title = models.CharField(max_length=100)
25     authors = models.ManyToManyField(Author)
26     publisher = models.ForeignKey(Publisher)
27     publication_date = models.DateField()
在控制台输入以下命令,按照要求输入帐号、密码,建立上述表格: 
***@Android:~/newsns# python manage.py validate
0 errors found
***@Android:~/newsns# python manage.py syncdb

创建好表格后我们在manage.py shell中进行测试:

 1 ***@Android:~/newsns# python manage.py shell
 2 Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
 3 Type "copyright", "credits" or "license" for more information.
 4 
 5 IPython 0.13.1 -- An enhanced Interactive Python.
 6 ?         -> Introduction and overview of IPython's features.
 7 %quickref -> Quick reference.
 8 help      -> Python's own help system.
 9 object?   -> Details about 'object', use 'object??' for extra details.
10 
11 In [1]: from newsns.models import Publisher
12 
13 In [2]: p = Publisher(name = 'Jim', city = 'beijing')
14 
15 In [3]: p.save()
16 
17 In [4]: l = Publisher.objects.all()
18 
19 In [5]: for n in l:
20    ...:     print n.name
21    ...:     
22 Jim

好了,测试无误。

3.创建表单

在app目录下创建forms.py文件,内容和models.py呼应。

1 #coding:utf-8
2 
3 from django import forms
4 
5 class snsform(forms.Form):
6         name = forms.CharField(label = "姓名")
7         content = forms.CharField(label = "内容", widget = forms.Textarea)

在views.py中添加下述代码:

 1 def home(request):
 2         if request.method == 'POST':
 3                 data = newsns()
 4                 for i in request.POST.keys():
 5                         if hasattr(data, i):
 6                                 setattr(data, i, request.POST[i])
 7                 data.save()
 8         f = snsform()
 9         ls = newsns.objects.all()
10         return render_to_response("home.html", {"ls":ls, "f":f}, context_instance = RequestContext(request))

注意要添加引入模块

#coding:utf-8
from django.http import HttpResponse
from django.template import Template, Context
from django.shortcuts import render_to_response, redirect
from mysns.models import newsns
from django.template import RequestContext
from mysns.forms import snsform

在templates目录下创建default文件夹,在该文件夹下建立一个layout.html文件,添加如下代码:

 1 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 2 <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css">
 3 <div class="navbar navbar-fixed-top">
 4   <div class="navbar-inner">
 5     <div class="container-fluid">
 6       <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
 7         <span class="icon-bar"></span>
 8         <span class="icon-bar"></span>
 9         <span class="icon-bar"></span>
10       </a>
11       <a class="brand" href="#">Uliweb Zone</a>
12       <div class="nav-collapse">
13 
14 <ul class="nav">
15 
16 <li><a href="/"><span>首页</span></a></li><li><a href="/forum"><span>论坛</span></a></li><li class="active"><a href="/tutorial"><span>教程</span></a></li><li><a href="/about"><span>关于</span></a></li>
17 
18 
19 
20 </ul>
21 
22 
23 <style>
24 #userinfo.btn-toolbar {margin-top:0;margin-bottom:0;font-size:14px;}
25 #userinfo.btn-toolbar a{vertical-align:middle;}
26 #userinfo img {
27 -webkit-border-radius: 3px;
28    -moz-border-radius: 3px;
29         border-radius: 3px;
30 }
31 #userinfo [class^="icon-"], #userinfo [class*=" icon-"], #userinfo [class^="icon-"]:hover, #userinfo [class*=" icon-"]:hover{
32     vertical-align:middle;
33     margin-bottom:3px;
34 }
35 </style>
36 
37 
38         <p class="pull-right user_info">
39             <a href="/login">登录</a> | <a href="/register">注册</a>
40         </p>
41 
42 
43       </div><!--/.nav-collapse -->
44     </div>
45   </div>
46 </div>
47 <div style= 'padding:50px 5px 15px 20px;'>
48 {% block content %}
49 {% endblock %}
50 </div>

然后再创建一个home.html文件,添加代码

{% extends 'default/layout.html' %}
{% block content %}
<form action = "" method = "post">
        {% csrf_token %}
        <table>
                {{f}}
        </table>
        <input type="submit" value="发送" class = 'btn btn-info'>
</form>

<hr>
{%for i in ls%}
<li>{{i.content}}<a class='btn' href = '/delete?id={{i.id}}'>删除</a><a class = 'btn' href = '/edit?id={{i.id}}'>编辑</a></li>
{%endfor%}
</hr>

{% endblock %}

 layout.html文件中的

{% block content %}
{% endblock %}

表示home.html中{% block content %}与{% endblock %}之间的代码。

接下来在urls.py文件中添加url匹配

(r'^home', home),

注意要导入home函数。

我们还需要在views.py文件中实现编辑和删除功能。

编辑功能的实现思路是:获取需要编辑的帖子的id,根据该id从数据库中读取内容,在编辑页面edit.html中显示,让用户对内容进行修改,用户修改后进行post提交,根据id保存至数据库,id为原来的id,即id = int(request.GET['id'])。

删除功能的实现思路是:读取需要删除的帖子的id,根据该id从数据库中读取内容,将其删除。具体实现代码为:

 1 def delete(request):
 2         if 'id' in request.GET:
 3                 id = int(request.GET['id'])
 4                 delcontent = newsns.objects.get(id = id)
 5                 delcontent.delete()
 6         return redirect('/home')
 7 
 8 def edit(request):
 9         if request.method == 'GET':
10                 if 'id' in request.GET:
11                         ls = newsns.objects.get(id = int(request.GET['id']))
12                         f = snsform(data = {'name':ls.name, 'content':ls.content})
13                         return render_to_response("edit.html", {"f":f}, context_instance = RequestContext(request))
14         if request.method == 'POST':
15                 data = newsns.objects.get(id = int(request.GET['id']))
16                 for i in request.POST.keys():
17                         if hasattr(data, i):
18                                 setattr(data, i, request.POST[i])
19                 data.save()

现在我们还需要在模版目录下创建edit.html文件:

 1 {%extends 'default/layout.html' %}
 2 {% block content %}
 3 <form action = "" method = "post">
 4         {% csrf_token %}
 5         <table>
 6                 {{f}}
 7         </table>
 8         <input type="submit" value="发送" class = 'btn btn-info'>
 9 </form>
10 
11 <hr>
12 {%for i in ls%}
13 <li>{{i.content}}
14 {%endfor%}
15 </hr>
16 
17 {% endblock %}

浏览器中输入http://127.0.0.1:8000/home,打开便是一个具备基本增删改查功能的sns了。

 

 

1首先创建一个工程newsnsdjangoadminpystartprojectnewsns在工程目录下新建一个文件夹templates,在settingspy文件中对该模版路径进行配置:1impo
CreateaSimpleAPIUsingDjangoRESTFrameworkinPythonWHATISANAPIAPIstandsforapplicationprogramminginterfa
displot参数如下snsdistplot(a,binsNone,histTrue,kdeTrue,rugFalse,fitNone,hist_kwsNone,kde_kwsNone,rug_kws
今日闲逛落伍,看到thinkSNS,而且是开源,还没有详细看,网站介绍:ThinkSNS源于办公圈项目,WEB端基于国内技术领先ThinkPHP框架开发,另外还有IM客户端软件。ThinkSNS
1创建项目2创建static目录及配置1创建放css,javascript,img目录2在settingspy中将static绝对路径保存到变量STATICFILES_DIRS中。3创建app及配
首先编辑viewspy文件每个响应对应一个函数函数必须返回一个响应函数必须存在一个参数一般约定为request每个响应函数对应一个URLfromdjangoshortcutsimportrenderf
首先分析要做项目结构,整理出关系图2运行pythonmanagepystartappXXX创建一个app3根据关系图设计models层,理清关系,设计好数据结构4在settings位置配置ap
创建一个Django项目及应用djangoadminstartprojectmysitecdmysite手动创建一个templates文件夹用来保存html文件mkdirtemplatespython
如何创建一个项目?安装好python,pycharm,Django之后,然后在pycharm命令行djangoadminstartprojectMyFirstPjt。MyFirstPjt为创建项目
通过web框架搭建一个最简易程序:第一步:新建一个web框架程序通过CMD进入到想要创建web程序文件夹数据命令djangoadminstartprojectyourhtml第二步:修改并添加功能