Skip to content

Commit

Permalink
add shop pages
Browse files Browse the repository at this point in the history
  • Loading branch information
hustlzp committed Feb 26, 2013
1 parent 5a28985 commit 0d103a8
Show file tree
Hide file tree
Showing 22 changed files with 453 additions and 9 deletions.
2 changes: 1 addition & 1 deletion xichuangzhu/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
import home, work, collection, author, dynasty, user, review, love
import home, work, collection, author, dynasty, user, review, love, product
Binary file modified xichuangzhu/controllers/__init__.pyc
Binary file not shown.
60 changes: 60 additions & 0 deletions xichuangzhu/controllers/product.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#-*- coding: UTF-8 -*-

from flask import render_template, request, redirect, url_for, json, session

from xichuangzhu import app

from xichuangzhu.models.product_model import Product

# page - shop
#--------------------------------------------------

# view
@app.route('/shop')
def shop():
products = Product.get_products(12)
return render_template('shop.html', products=products)

# page - single product
#--------------------------------------------------

# view
@app.route('/product/<int:product_id>')
def single_product(product_id):
product = Product.get_product(product_id)
return render_template('single_product.html', product=product)

# page - add product
#--------------------------------------------------

# view
@app.route('/product/add', methods=['GET', 'POST'])
def add_product():
if request.method == 'GET':
return render_template('add_product.html')
elif request.method == 'POST':
product = request.form['product']
url = request.form['url']
image_url = request.form['image-url']
introduction = request.form['introduction']

new_product_id = Product.add_product(product, url, image_url, introduction)
return redirect(url_for('single_product', product_id=new_product_id))

# page - edit product
#--------------------------------------------------

# view
@app.route('/product/edit/<int:product_id>', methods=['GET', 'POST'])
def edit_product(product_id):
if request.method == 'GET':
product = Product.get_product(product_id)
return render_template('edit_product.html', product=product)
elif request.method == 'POST':
product = request.form['product']
url = request.form['url']
image_url = request.form['image-url']
introduction = request.form['introduction']

Product.edit_product(product_id, product, url, image_url, introduction)
return redirect(url_for('single_product', product_id=product_id))
Binary file added xichuangzhu/controllers/product.pyc
Binary file not shown.
Binary file modified xichuangzhu/controllers/review.pyc
Binary file not shown.
Binary file added xichuangzhu/controllers/shop.pyc
Binary file not shown.
10 changes: 9 additions & 1 deletion xichuangzhu/controllers/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from xichuangzhu import app

from xichuangzhu.models.user_model import User
from xichuangzhu.models.love_model import Love
from xichuangzhu.models.review_model import Review

import urllib, urllib2

Expand All @@ -13,6 +15,8 @@

import hashlib

import re

# proc - login by douban's oauth2.0
@app.route('/login/douban')
def auth():
Expand Down Expand Up @@ -135,4 +139,8 @@ def logout():
@app.route('/people/<int:user_id>')
def people(user_id):
people = User.get_people(user_id)
return render_template('people.html', people=people)
works = Love.get_works_by_user_love(user_id)
for work in works:
work['Content'] = re.sub(r'<([^<]+)>', '', work['Content'])
reviews = Review.get_reviews_by_user(user_id)
return render_template('people.html', people=people, works=works, reviews=reviews)
Binary file modified xichuangzhu/controllers/user.pyc
Binary file not shown.
6 changes: 5 additions & 1 deletion xichuangzhu/controllers/work.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@
@app.route('/work/<int:work_id>')
def single_work(work_id):
work = Work.get_work(work_id)
work['Content'] = re.sub(r'<([^<]+)>', r"<sup title='\1'></sup>", work['Content'])
# add comment
work['Content'] = re.sub(r'<([^<^b]+)>', r"<sup title='\1'></sup>", work['Content'])
# add bank row
work['Content'] = work['Content'].replace('/', "<div class='bank'></div>")
# gene paragraph
work['Content'] = markdown2.markdown(work['Content'])
reviews = Review.get_reviews_by_work(work['WorkID'])
is_loved = Love.check_love(session['user_id'], work_id)
Expand Down
Binary file modified xichuangzhu/controllers/work.pyc
Binary file not shown.
39 changes: 39 additions & 0 deletions xichuangzhu/models/product_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from xichuangzhu import conn, cursor

class Product:

# GET

# get single product
@staticmethod
def get_product(product_id):
query = "SELECT * FROM product WHERE ProductID = %d" % product_id
cursor.execute(query)
return cursor.fetchone()

# get products by num
@staticmethod
def get_products(num):
query = "SELECT * FROM product LIMIT %d" % num
cursor.execute(query)
return cursor.fetchall()

# NEW

# add product
@staticmethod
def add_product(product, url, image_url, introduction):
query = '''INSERT INTO product (Product, Url, ImageUrl, Introduction)\n
VALUES ('%s', '%s', '%s', '%s')''' % (product, url, image_url, introduction)
cursor.execute(query)
conn.commit()
return cursor.lastrowid

# EDIT

# edit product
@staticmethod
def edit_product(product_id, product, url, image_url, introduction):
query = '''UPDATE product SET Product = '%s', Url = '%s', ImageUrl = '%s', Introduction = '%s' WHERE ProductID = %d''' % (product, url, image_url, introduction, product_id)
cursor.execute(query)
return conn.commit()
Binary file added xichuangzhu/models/product_model.pyc
Binary file not shown.
12 changes: 12 additions & 0 deletions xichuangzhu/models/review_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,18 @@ def get_reviews_by_work(work_id):
cursor.execute(query)
return cursor.fetchall()

# get reviews from a user
@staticmethod
def get_reviews_by_user(user_id):
query = '''SELECT review.ReviewID, review.Title, review.Content, review.Time, user.UserID, user.Name, user.Avatar, work.WorkID, work.Title AS WorkTitle, work.Content AS WorkContent, author.Author\n
FROM review, user, work, author\n
WHERE review.UserID = %d\n
AND review.UserID = user.UserID\n
AND review.WorkID = work.WorkID\n
AND work.AuthorID = author.AuthorID''' % user_id
cursor.execute(query)
return cursor.fetchall()

# NEW

# add a review to a work
Expand Down
Binary file modified xichuangzhu/models/review_model.pyc
Binary file not shown.
16 changes: 15 additions & 1 deletion xichuangzhu/static/style/page.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
body{margin:55px 0 0 0;font-family:'arial','宋体';}body #main-wap{font-size:14px;line-height:26px;min-height:700px;}body #main-wap h1{font-size:25px;line-height:25px;font-weight:bold;margin:15px 0 12px 0;}
body #main-wap h2{font-size:18px;line-height:18px;font-family:'微软雅黑';font-weight:normal;margin:20px 0 15px 0;color:darkred;clear:both;}
body #main-wap .tooltip{font-family:'arial','宋体';text-indent:0;font-weight:normal;font-size:12px;line-height:22px;}
body #main-wap .tooltip-inner{padding-top:5px;padding-bottom:5px;}
#douban-icon{float:right;margin-top:8px;cursor:pointer;}
#footer{text-align:center;font-size:12px;font-family:'微软雅黑';margin:20px 0 10px 0;}
.link-more a{margin-left:5px;font-size:12px;font-family:'微软雅黑';}
Expand All @@ -25,7 +26,8 @@ body #main-wap .tooltip{font-family:'arial','宋体';text-indent:0;font-weight:n
#page-single-work .work-content{font-family:'仿宋_GB2312';font-weight:bold;margin-bottom:30px;font-size:14pt;}#page-single-work .work-content sup{font-family:'yahei';font-size:12px;font-weight:normal;padding:5px 0px;cursor:pointer;color:#666;}
#page-single-work .work-type-shi{text-align:center;}
#page-single-work .work-type-ci{text-indent:2em;line-height:30px;}
#page-single-work .work-type-geci{text-indent:11em;}
#page-single-work .work-type-geci p{text-indent:11em;margin-bottom:7px;}
#page-single-work .work-type-geci .bank{height:20px;}
#page-single-work .work-type-wen p{text-indent:2em;line-height:30px;margin-bottom:18px;}
#page-single-work .work-collection{font-weight:bold;font-size:16px;margin-bottom:5px;}
#page-single-work .work-collection-introduction{font-size:14px;}
Expand Down Expand Up @@ -61,3 +63,15 @@ body #main-wap .tooltip{font-family:'arial','宋体';text-indent:0;font-weight:n
#page-my-love .work-item{margin-bottom:15px;}#page-my-love .work-item .work-title{font-size:16px;line-height:30px;font-weight:bold;}
#page-my-love .work-item .work-author{font-size:12px;font-weight:normal;}#page-my-love .work-item .work-author a{color:#333;}
#page-my-love .work-item .work-content{line-height:22px;}
#page-people .user-avatar{float:left;margin-top:15px;}
#page-people .user-info{margin-left:60px;}#page-people .user-info .user-name{font-size:30px;line-height:30px;margin-top:15px;font-weight:bold;}
#page-people .user-info .user-signature{font-size:12px;color:#666;}
#page-people .work-item{margin-bottom:15px;}#page-people .work-item .work-title{font-size:16px;line-height:30px;font-weight:bold;}
#page-people .work-item .work-author{font-size:12px;font-weight:normal;}#page-people .work-item .work-author a{color:#333;}
#page-people .work-item .work-content{line-height:22px;}
#page-people .review-item{margin-bottom:15px;}#page-people .review-item .review-title{font-size:16px;font-weight:bold;}
#page-people .review-item .review-extra-info{font-size:12px;line-height:22px;}
#page-people .review-item .review-content{font-size:12px;line-height:22px;}
#page-shop .products-wap{margin-top:15px;}#page-shop .products-wap .product-item{float:left;margin:0 20px 15px 0;}#page-shop .products-wap .product-item .product-image{width:290px;}
#page-single-product .product-image{margin-top:15px;}
#page-single-product .product-introduction{margin-bottom:10px;}
123 changes: 121 additions & 2 deletions xichuangzhu/static/style/page.less
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ body{
font-size: 12px;
line-height: 22px;
}

.tooltip-inner{
padding-top: 5px;
padding-bottom: 5px;
}
}
}

Expand Down Expand Up @@ -240,7 +245,14 @@ body{
line-height: 30px;
}
.work-type-geci{
text-indent: 11em;
p{
text-indent: 11em;
margin-bottom: 7px;
}

.bank{
height: 20px;
}
}
.work-type-wen{
p{
Expand Down Expand Up @@ -574,4 +586,111 @@ body{
line-height: 22px;
}
}
}
}

// page people
//-----------------------------------------------------
#page-people{
.user-avatar{
float: left;
margin-top: 15px;
}

.user-info{
margin-left: 60px;

.user-name{
font-size: 30px;
line-height: 30px;
margin-top: 15px;
font-weight: bold;
}

.user-signature{
font-size: 12px;
color: #666;
}
}

.work-item{
margin-bottom: 15px;

.work-title{
font-size: 16px;
line-height: 30px;
font-weight: bold;
}

.work-author{
font-size: 12px;
font-weight: normal;

a{
color: #333;
}
}

.work-content{
line-height: 22px;
}
}

.review-item{
margin-bottom: 15px;

.review-title{
font-size: 16px;
font-weight: bold;
}

.review-extra-info{
font-size: 12px;
line-height: 22px;
}

.review-content{
font-size: 12px;
line-height: 22px;
}
}
}

// page shop
//-----------------------------------------------------
#page-shop{

.products-wap{
margin-top: 15px;

.product-item{
float: left;
margin: 0 20px 15px 0;

.product-image{
width: 290px;

img{
//border-radius: 2px;
}

}
}
}
}

// page single product
//-----------------------------------------------------
#page-single-product{
.product-image{
margin-top: 15px;
}

.product-name{

}

.product-introduction{
margin-bottom: 10px;
}
}

50 changes: 50 additions & 0 deletions xichuangzhu/templates/add_product.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{% extends "layout.html" %}

{% block page_title %}添加商品{% endblock %}

{% block page_id%}page-add-product{% endblock %}

{% block body %}

<form id="form-add-product" class="form-horizontal" method="post" action="{{ url_for('add_product') }}">
<fieldset>
<legend>添加商品</legend>

<div class="control-group">
<label class="control-label">商品</label>
<div class="controls">
<input type="text" name="product" />
</div>
</div>

<div class="control-group">
<label class="control-label">主页</label>
<div class="controls">
<input type="text" class="input-xxlarge" name="url" />
</div>
</div>

<div class="control-group">
<label class="control-label">图片</label>
<div class="controls">
<input type="text" class="input-xxlarge" name="image-url" />
</div>
</div>

<div class="control-group">
<label class="control-label">简介</label>
<div class="controls">
<textarea class="input-xxlarge" rows="10" name="introduction"></textarea>
</div>
</div>

<div class="control-group">
<div class="controls">
<input type="submit" value="提交" class="btn btn-primary" />
</div>
</div>

</fieldset>
</form>

{% endblock %}
Loading

0 comments on commit 0d103a8

Please sign in to comment.